求C语言算法:解决一次输入多组数据,之后批量处理,输去。

具体问题是这样:一个地方有鸽子和兔子。一共n个头,m只脚。输入包括多组数据。
每行包括2个数据:n、m(其中1≤n, m≤230)。 n、m都是整数。 输入以0 0作为结束。
每组数据的输出都只有一行,分别是鸽子的数量和兔子数量。如果输入的测试数据不能求得结果,就输出"Error"。
输入样式:

35 94
1 3
0 0
输出样式:
23 12
Error

#include <stdio.h>
int main()
{
int m , n, gezi, tuzi;
while (scanf("%d %d",&n, &m) != EOF && (m!=0 || n!=0))//多组输入
{
tuzi = (m-2*n)/2;//得到兔子个数
gezi = (4*n - m)/2;//得到鸽子数目
if ((m-2*n)%2==1)//判断是否有解
{
printf("Error\n");
}
else
{
printf("%d %d\n",gezi, tuzi);
}

}
return 0;
}追问

还是那个问题,放到VC6.0中,运行会输入一个数据,紧跟着输出这个数据。还有,判断是否有解里面的条件,如果输入n=4 m=4会有一个负数~~这个问题我解决了。主要是批量输入的问题。

追答

    忘了判断m>=2*n了,不好意思啊

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-22
给你一个思路:
x为鸽子,y为兔子,则x=n/2-m y=m-n/2
如果x+y=n 则结果正确 否则Error.
一会给你写个DEMO。追问

这个运算方法我知道。问题主要在输入多组数据上,楼上的那些用到while循环,用EOF控制的我也试过,可是还是每次输入一组数据就会输出一个结果。

第2个回答  2013-01-22
这是解方程组吧。
设 x鸽子 y兔子

2*x + 4*y = m
x + y = n
整理得:
y = m/2 - n
x = n - y = 2*n - m/2

于是只需要计算这两个方程即可。即
int n,m,x,y;
scanf("%d%d",&n,&m);
x = 2 * n - m / 2;
y = m/2 - n;
printf("%d,%d",x,y);

ps.要求x,y皆为整数。判断这个只需判断m的是奇数还是偶数,或者判断x+y是否等于n。
至于批量处理,需要用到while
while(scanf("%d%d",&n,&m)!=EOF)
{
}
大概是这样。追问

不行啊亲,我记得也是用while(scanf("%d%d",&n,&m)!=EOF)来处理这种输入情况,但是在VC 6.0运行环境下,还是会输入一组就输出一组。重点就在这里~~

追答

呃。。如果是想全部输入完再输出的话,要用数组保存每一组数据。
int n[?],m[?];
int i = 0;
while(scanf("%d%d",&n[i],&m[i])!=EOF)
{i++;}
这样输入。然后输完之后再处理就好。但是在黑框里人手输入的话不知道怎么才算是输入结束。。

相似回答