鸡兔同笼问题

375 阅读2分钟

鸡兔同笼

问题描述

鸡兔同笼问题是数学中经典问题。鸡有一个头和两只脚,兔子有一个头和四只脚。现在有35个头和80只脚。

问笼中有多少只鸡多少只兔子。

常规解法-二元一次方程组。

令 鸡的数量是X ,兔子的数量是Y。列出的二元一次方程组如下:

X + Y = 35;

2X + 4Y = 80;

取差解法-(假设都是兔子)

假设都是兔子,那么应该有的脚数量则是, 4 * 35 = 140 。 应该有的脚数量和实际的脚数量比较。

1、二者相等,则说明全是兔子。

2、应该有的脚数量 大于 实际的脚数量,则说明多计算了鸡的脚,差值除以2得到鸡的数量。

3、最后求兔子数量 35 - 鸡的数量 即可。

140 - 80 = 60(多了鸡的脚), 60 /2 = 30(鸡数量), 35 - 30 = 5(兔子数量) 。

鸡数量 = (4 * 35 -80)/2  

兔数量 =  35 - 鸡数量 

编程解法采用取差解法

#include <iostream>
using namespace std;

int main() {
    std::cout << "尘远同学编程-少年班欢迎您! 报名热线 : 025 - 8662 0610" <<std::endl;
    // head 头数量 foot 脚数量 c 鸡数量 r 兔子数量
    int head,foot,c,r;
    head=35;
    foot=80;
    c = (head * 4 - foot)/2; // 令都是兔子 和 实际脚数量差 求出鸡的数量
    r = head - c; 
    printf("头数量 head==%4d,脚数量 foot==%4d,其中有鸡数量 c==%4d,兔子数量 r==%4d\n",head,foot,c,r);


}

运行结果如下:

image.png

反过来,先求兔子数量

1、 令都鸡,应该的脚数量 2 * head ,和实际的脚数量差值, foot - (2 *head)

2、 == 0 则说明都是鸡

3、如果大于0 则说明多了兔子的脚数量 ,再除以2 得到兔子数量

4、 head - 兔子数量 = 鸡数量

#include <iostream>
using namespace std;


int main() {
    std::cout << "尘远同学编程-少年班欢迎您! 报名热线 : 025 - 8662 0610" <<std::endl;
    // head 头数量 foot 脚数量 c 鸡数量 r 兔子数量
    int head,foot,c,r;
    head=35;
    foot=80;
    r=(foot - head*2 )/2;
    /*c = (head * 4 - foot)/2;
    r = head - c;*/

    c=head-r;
    printf("头数量 head==%4d,脚数量 foot==%4d,其中有鸡数量 c==%4d,兔子数量 r==%4d\n",head,foot,c,r);


}

扩展问题

类似的问题还有已知翅膀数量,求不同昆虫的数量的问题。

基本解法,列方程组, 二元一次方程组,三元一次方程组。

程序的解法就是令其中一个,求差值, 除以2 。