计算机能力挑战初赛2020.20题
题目描述:
输入正整数A、B、C(0<=A,B,C<=10000),若用'+'、'-'、'*'、'/'、'%'之一组成等式(即A@B=C,@是上述运算符之一,),则输出“YES”,否则输出“NO”;
输入:
第一行输入正整数N(1<=N<=1000)表示有N组数据,
其后有N行非零整数A、B、C。
输出:
对于每行整数A、B、C,其计算结果各占一行。
输入样例:
5
2 3 6
3 5 1
5 3 1
1 4 1
6 2 7
输出样例:
YES
NO
NO
YES
NO
(说明:输入样例中2*3=6,1%4=1)
题目分析:
初始代码如下:
#include <stdio.h>
int main(void) {
int num;
scanf("%d", &num);
int A;
int B;
int C;
for (int i = 0; i < num; i++) {
scanf("%d", &A);
scanf("%d", &B);
scanf("%d", &C);
if (A + B == C || A - B == C || A * B ==C || A / B == C || A % B == C) {
printf("YES");
}
else {
printf("NO");
}
}
return 0;
}
运行后发现 5 3 1的输出结果为YES,不符题意。
显然是因为在整形类型下:5/3=1。
所以将判定A / B == C修改为B * C == A
最终代码:
#include <stdio.h>
int main(void) {
int num;
scanf("%d", &num);
int A;
int B;
int C;
for (int i = 0; i < num; i++) {
scanf("%d", &A);
scanf("%d", &B);
scanf("%d", &C);
if (A + B == C || A - B == C || A * B ==C || C * B == A || A % B == C) {
printf("YES\n");
}
else {
printf("NO\n");
}
}
return 0;
}