问题描述:
一个笼子里里关了鸡和兔子。已经知道了笼子里的脚的总数,问笼子中至少有多少只动物,至多有多少只动物?
输入数据
第一行是测试的数据组数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 "); }else if(nFeet%4 == 0){ //如果能被4整除 printf("%d %d ", nFeet/4, nFeet/2); }else{ //不能被4整除 说明多出两只脚 printf("%d %d ", nFeet/4+1, nFeet/2); } } return 0; }