16、鸡兔同笼
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的数目,如果无解,则输出“No answer”(不要引号)。
- 输入:第一行输入一个数据a,代表接下来共有几组数据,在接下来的(a<10)、a行里,每行都有一个n和m.(0<m,n<100)
- 输出:输出鸡兔的个数,或者No answer
思路
-
当m(总腿数)不为偶数或者鸡或者兔的数量小于0的时候输出“no anwser”
-
假设全是鸡(用总头数35,总腿数94为例子)
- 已知笼子里总共有35头,则脚的总数为:35x2=70;
- 但实际总的脚数为94,说明缺少的脚数为:94-70=24
- 根据图片知缺少的脚数是由兔子变成鸡少掉的,一只兔子少掉2只脚。
- 则兔子的数量为:24÷2=12(只)
- 鸡的数量为:35-12=23(只)
具体实现
#include<stdio.h>
int main()
{
int x = 0, y = 0;//x代表小鸡只数,y代表兔子只数,
int n = 0, m = 0;//n代表总头数,m代表总腿数
int a;//代表共有几组数据
int ji = 0, tu = 0; // ji全部是鸡的腿数, tu表缺少的腿数
printf("共测试几组数据:");
scanf_s("%d", &a);
while (a--)
{
if (a >= 10) return 0;//每次测试数据超过了
printf("\n");
printf("总头数和总腿数:");
scanf_s("%d %d", &n, &m);
if (m % 2 != 0 || x < 0 || y < 0) {
printf("No answer");
return 0;
}
//假设全部是鸡
ji = 2 * n;//假设全部是鸡,则腿总数为
tu = m - ji;//缺少的腿数
y = tu / 2;//兔子数量
x = n - y;//鸡的数量
//假设全部是鸡的合并式子
/*y = (m - 2*n) / 2;
x = (4 * n - m) / 2;*/
printf("兔子只数: %d,鸡只数:%d\n",y,x);
}
return 0;
}
运行结果
复杂度
- 时间复杂度O(1)--- 不考虑输入数据所占用的时间,其他为常数级
- 空间复杂度 O(1)--- 仅含常数级的变量,除此无额外的辅助空间
小结
知道如何计算,用代码逻辑表示还是不会,看了别人的代码能写出来,将思维转换为代码还很欠缺。