【蓝蓝计算机考研算法】-day11-鸡兔同笼

149 阅读1分钟

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为例子)

    1. 已知笼子里总共有35头,则脚的总数为:35x2=70;
    2. 但实际总的脚数为94,说明缺少的脚数为:94-70=24
    3. 根据图片知缺少的脚数是由兔子变成鸡少掉的,一只兔子少掉2只脚。
    4. 则兔子的数量为:24÷2=12(只)
    5. 鸡的数量为: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;
}

运行结果

image.png

复杂度

  • 时间复杂度O(1)--- 不考虑输入数据所占用的时间,其他为常数级
  • 空间复杂度 O(1)--- 仅含常数级的变量,除此无额外的辅助空间

小结

知道如何计算,用代码逻辑表示还是不会,看了别人的代码能写出来,将思维转换为代码还很欠缺。