PAT乙级1011
1011 A+B 和 C (15分)
题目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805312417021952
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。输入格式:
输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。
输出格式:
对每组测试用例,在一行中输出 Case #X: true
如果 A+B>C,否则输出 Case #X: false
,其中 X
是测试用例的编号(从 1 开始)。
输入样例
4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
输出样例
Case #1: false
Case #2: true
Case #3: true
Case #4: false
我的理解
感觉自己的做法偏离了题目的用意,不过也能通过。看数据范围,超过了平常int的范围,本来的思路是根据A、B、C、的正负调整A+B > C的位置关系来判断。例如A、B、C都为正时,改为判断A > C - B,这样就不会导致因为数据太大或太小而溢出。A、B异号时,直接进行计算即可,也不会溢出。其余情况类似处理。
然后我就用了c++中的long long 类型。直接计算即可。
代码段
#include <iostream>
using namespace std;
int main() {
int T;
cin >> T;
short result[T];
for (int i = 0; i < T; ++i) {
long long a, b, c;
cin >> a >> b >> c;
if (a + b > c) {
result[i] = 1;
} else {
result[i] = 0;
}
}
for (int j = 0; j < T; ++j) {
if (result[j] == 1) {
cout << "Case #" << j + 1 << ": true" << endl;
} else {
cout << "Case #" << j + 1 << ": false" << endl;
}
}
return 0;
}
更多精彩