C语言编程 兔子鸽子问题
判断error的情况有问题。其实这题列出公式就可以解答了:
设x只鸽子,已知兔子,则:
x+y=n;
2x+4y=m;
解得:x=2n-m/2,y=m/2-n。
因为x,y都是非负整数,所以m/2必须是一个整数,也就是m必须是偶数。同时:
x=2n-m/2>=0,解得4n>=m;
y=m/2-n>=0,解得m>=2n;
因此2n<=m<=4n,且m是偶数。这就是判断是否“Error”的条件。
#include
intmain(intargc,char*argv[])
unsignedintn,m;
while(scanf("%d%d",&n,&m)&&!(m==0&&n==0))
if(m%2!=0||m<2*n||m>4*n)
printf("Error\n");
printf("%d%d\n",(2*n-m/2),(m/2-n));
return0;
我把浮点数强制转换成整数,然后判断是否相等,(x1==x&&y2==y)不相等的话,就说明错误了,这个对吗?我测试了很多数据,都能验证的呢!那我是错在哪里呢?
你的编程好简洁哈,要像你学习哇!!
if((x>0&&y>0)&&(x1==x&&y2==y))这个判断有问题,x和y不需要大于0的,可以等于0。
比如有0只鸽子,3只兔子,也就是n=3,m=12,是有有解的一个输入。正确的输出结果是:03,但是你的程序会输出“Error”的。
if((x>=0&&y>=0)&&(x1==x&&y2==y))
试试。平时不建议浮点数直接用等于(==)判等,不过你这题应该没问题的。
本回答由提问者推荐
>>">C#...算兔子的算法。。要完整代码,高手>>>
嗯,这个题目蛮好玩,做做看。纯粹为了练手,不是为给你做作业