鸡兔同笼
问题描述
鸡兔同笼问题是数学中经典问题。鸡有一个头和两只脚,兔子有一个头和四只脚。现在有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);
}
运行结果如下:
反过来,先求兔子数量
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 。