16、鸡兔同笼
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的数目,如果无解,则输出“No answer”(不要引号)。
- 输入 第一行输入一个数据a,代表接下来共有几组数据,在接下来的(a<10)、a行里,每行都有一个n和m.(0<m,n<100)
- 输出 输出鸡兔的个数,或者No answer
思路
根据输入的鸡和兔的总只数和腿数从而建立二元一次方程组,for循环是寻找成立的第一个条件,if判断则是寻找成立的第二个条件。本项目的巧思在于,通过一些判断减少了循环的次数即,用兔的只数来进行循环,用兔的腿数来进行判断。
具体实现
int main() {
int a, m, n, i, flag;
printf("请输入数据组数:");
scanf("%d", &a);
while(a) {
printf("请依次输入鸡和兔的总数量,总腿数:");
scanf("%d %d", &m, &n);
// 是否有解
flag = 0;
for (i = 0; i <= m; i++) {
if ((i * 4 + (m-i) * 2) == n) {
// 两个二元一次方程若有解,则解必唯一,即有答案则跳出循环
printf("鸡有%d只,兔有%d只\n\n", (m-i), i);
// 有解
flag = 1;
break;
} else if (i *4 > n) // 当兔子的腿数多于总腿数时,再往后的循环都是多余的
break;
}
if ( flag == 0)
printf("No answer");
a--;
}
return 0;
}
小结
鸡兔同笼是一个经典的数学问题,最简单的方法就是循环遍历,但这样写出来的程序略显臃肿,本程序主要进行了代码的精简以及进行判断时的构思、