题目如下,请找出代码错误,改了十多次了,救命qwq
#include <stdio.h>
int main()
{
int K;
scanf("%d",&K);
while(K--)
{
int y,a,b,c;
float x;
scanf("%d %d %d",&a,&b,&c);
if(c==1){
if(a==b!=0){
printf("0\n");
goto end;
}
if(a==b==0){
printf("1\n");
goto end;
}
if(a!=b){
printf("None\n");
goto end;
}
}else if(c==0){
if(a==0&&b!=0){
printf("0\n");
goto end;
}else{
printf("None\n");
goto end;
}
}
else{
x=(b*c-a)/(1.0-c);
y=(int)x;
if(x<0||x-y>0){
printf("None\n");
goto end;
}
printf("%d\n",y);
}
end:;
}
return 0;
}
Description
题目描述
求方程(x+a)/(x+b)=c的非负整数根,其中a.bc都是非负整数
输入
第一行是一个整数K,表示样例的个数(K≤30000)。以后的K行每行为以一个样例,包含三个非负整数a.b.c(a,b,c≤10°。
输出
每行输出一个样例的结果。如果方程没有根,输出None”,否则输出根的值,如果存在多个根,输出最小的那个。
SampleInput
Sample Output
None
Source
修改如下,供参考:
#include <stdio.h>
int main()
{
int K;
scanf("%d", &K);
while (K--)
{
int y, a, b, c;
float x;
scanf("%d %d %d", &a, &b, &c);
if (c == 1) {
if (a != 0 && b != 0 && a == b) {
printf("0\n");
//goto end;
}
if (a == 0 && b == 0) {
printf("1\n");
//goto end;
}
if (a != b) {
printf("None\n");
//goto end;
}
}
else if (c == 0) {
if (a == 0 && b != 0) {
printf("0\n");
//goto end;
}
else {
printf("None\n");
//goto end;
}
}
else {
x = (b * c - a) / (1.0 - c);
y = (int)x;
if (x < 0 || x - y>0) {
printf("None\n");
//goto end;
}else
printf("%d\n", y);
}
//end:;
}
return 0;
}
这里应该把==0去掉吧
if(a==b==0)
这里不对,不可以3个变量作比较,只能2个比较
=-=-=-=-=
c语言里的比较本质上是一种运算,听名字也知道:比较运算符,运算就会有运算结果
a==b这个运算中,如果相等,结果是1,如果不等,结果是0
那么a==b==0这个式子,会先计算a==b,再把结果与0作比较,最终得出结果
如果你需要的是a与b都是0,那么需要这样写:a==0 && b==0
a==b!=0这么写是不对的
应该是a==b && a!=0 && b!=0
下面的一样,也需要修改