1011 A+B 和 C (15分)

题目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805312417021952

 PAT乙级1011 算法

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;
}
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄