c语言为什么按照要求写还会wrong呀……有什么错误的地方吗
你只满足了题目的测试用例吧
#include <stdio.h>
int main()
{
int n,m;
double x,y;
scanf("%d%d",&n,&m);
while(n!=0 && m!=0)
{
y = (m-2*n)/2.0;
x = n-y;
if(y-(int)y<1e-5)
printf("%.0f %.0f\n",x,y);
else
printf("Error\n");
scanf("%d%d",&n,&m);
}
return 0;
}
#include <stdio.h>
int main()
{
int n, m, x, y;
while (scanf("%d%d", &n, &m) == 2 && n != 0 && m != 0)
{
int a = m - 2 * n;
if (a <= 0 || a % 2 != 0) {
printf("Error\n");
continue;
}
y = a / 2;
x = n - y;
printf("%d %d\n", x, y);
}
return 0;
}
要注意完善细节啊,不止是题目提到的细节,还有本身隐含的细节。
如果是我,我会:
1:头和脚的个数肯定大于0,脚的个数肯定是偶数,先异常 处理。
2:头和脚其实有隐含的关系,脚的个数肯定和头有一定的算法也要满足,不满足就异常处理 比如1个头 10个脚就不合理,要计算做异常处理
3:如果数据范围内正常,那就正常计算了。 涉及除法的时候除数不能为0,计算的时候最好用乘法和减法比除法好(除法除不尽要考虑) 也就是说这里我理解证书能满足条件就不要用float,double之类
至于其他 暂时没有考虑到。。。
解答如下,有帮助请采纳
#include <stdio.h>
int main()
{
int m,n,x,y;
while(scanf("%d%d",&n,&m)==2&&n!=0&&m!=0)
if((m-n*2)<=0||(m-n*2)%2!=0)
printf("Error\n");
else
printf("%d %d\n",(m-n*2)/2,n-(m-n*2)/2);
return 0;
}
鸡兔同笼类问题
编程如下,思路可供参考:
#include<stdio.h>
int main()
{
int n,a,i;
long long int m,y=0,x=0;
while(scanf("%d%lld",&n,&m)!=EOF&& n != 0 && m != 0)
{
if(m%2!=0)
{
printf("Error\n");
continue;
}
y = m/2-n;
x = n-y;
if(x>=0&&y>=0)
{
printf("%lld %lld\n",x,y);
}
else
{
printf("Error\n");
}
}
return 0;
}
测试:
#include<stdio.h>
int main()
{
int n,a,i;
long long int m,y=0,x=0;
while(scanf("%d%lld",&n,&m)!=EOF&& n != 0 && m != 0)
{
if(m%2!=0)
{
printf("Error\n");
continue;
}
y = m/2-n;
x = n-y;
if(x>=0&&y>=0)
{
printf("%lld %lld\n",x,y);
}
else
{
printf("Error\n");
}
}
return 0;
}