【2023.10.30练习】C语言-判断等式成立
计算机能力挑战初赛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;
}