《程序设计引导和在线实践》例题2.1鸡兔同笼问题

时间:2021-11-29 14:15:39

问题描述:

一个笼子里里关了鸡和兔子。已经知道了笼子里的脚的总数,问笼子中至少有多少只动物,至多有多少只动物?

输入数据

第一行是测试的数据组数n,后面跟着n行输入,魅族测试数据占一行,包括一个正整数a(a < 32768)

输出要求

n行, 每行对应一个输入,输出是两个正整数,第一个是最少的动物书,第二是最大的动物数,两个正整数用空格分开

如果没有满足要求的的情况出现,则输出两个0

输入样例

2

3

20

输出样例

0 0

5 10

以目前的‘智商’,恐怕又要暴力解决了!最少的动物肯定是兔子为主了,从零开始,每次加4直到两者(总脚数)之差小于4 如果差是2就再加一个动物 如果是0就结束

如果是奇数那么就只好输出0 0了

不过这样的做法显然是大费周章了。

书上是这样分析这个问题的:

这个问题可以描述成任给一个正整数N,如果N是奇数,输出0 0,否则如果N是4的倍数,输出N/4 N/2,如果N不是4的倍数,输出N/4+1 N/2。这是一个一般性的计算题,

只要实现相应的判断和输出代码就可以了。题目中说明了输入整数在一个较小的范围之内,所以只需要考虑整数运算就可以了。

代码自然是简单的- -

智商自然是捉急的- -

书上的解决方法显然更加的具有‘大局观’

 

//http://www.cnblogs.com/xdblog/p/5451306.html
#include<iostream>
#include<stdio.h>
int main()
{
    int nNumber;
    int nFeet;
    scanf("%d", &nNumber);
    for(int i = 0; i < nNumber; i++){
        scanf("%d", &nFeet);
        if(nFeet%2 != 0)          //如果出现奇数 输出0 0
        {
            printf("0 0\n");
        }else if(nFeet%4 == 0){  //如果能被4整除
            printf("%d %d\n", nFeet/4, nFeet/2);
        }else{                      //不能被4整除  说明多出两只脚
            printf("%d %d\n", nFeet/4+1, nFeet/2);
        }

    }

    return 0;
}