1011 A+B 和 C (15 分)

1011 A+B 和 C (15 分)

给定区间 [−2的31次方,2的31次方] 内的 3 个整数 ABC,请判断 A+B 是否大于 C

输入格式:

输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 ABC。整数间以空格分隔。

输出格式:

对每组测试用例,在一行中输出 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

我的代码

#include<stdio.h>
const int maxt = 10;
int main(){
	int a[maxt] = {}, b[maxt] = {}, c[maxt] = {}, t;
	scanf("%d", &t);
	for(int i = 0; i < t; i++){
		scanf("%d%d%d", &a[i], &b[i], &c[i]);
	} 
	for(int i = 0; i < t; i++){
		if(a[i] + b[i] > c[i]) printf("Case #%d: true\n", i+1);
		else printf("Case #%d: false\n", i+1);
	}
	return 0;
} 

又是部分错误!

改正代码

#include<stdio.h>
const int maxt = 10;
int main(){
	long long a[maxt] = {}, b[maxt] = {}, c[maxt] = {};//相比于原先的代码只是把abc的变量类型改变了,因为根据题目的范围,a和b相加后是超过了int类型的范围的,所以才会导致错误
	int t;
	scanf("%d", &t);
	for(int i = 0; i < t; i++){
		scanf("%lld%lld%lld", &a[i], &b[i], &c[i]);
	} 
	for(int i = 0; i < t; i++){
		if(a[i] + b[i] > c[i]) printf("Case #%d: true\n", i+1);
		else printf("Case #%d: false\n", i+1);
	}
	return 0;
} 

思路

  1. 输入T,用以表示输入的数据组数,同时令tcase表示当前是第几组,初值为1.
  2. 对每组数据,判断A+B是否大于C:
    1. 若大于,则输出Case #%d: true,其中%d表示当前的tcase值
    2. 否则,输出Case #%d: false。
  3. 注意点:如果要执行T次循环,除了使用for之外,更简洁的写法是while(T--),但是不要用while(--T).这种写法是T-1次,而不是T次。
  4. int类型加起来之后会超过范围,所以abc都要用long long类型,并且输出输入格式是%lld

参考代码

  1. 只使用了一个循环,把输入和输出放在了一个循环里面。简洁了代码,学习!!
  2. 不需要使用数组,因为用了while函数没有i这个参数了,可以在循环内就进行运算一组组来。
  3. tcase初值设置为1,从第一组开始,在循环中自增
#include<cstdio>
int main(){
	int T, tcase = 1;
    scanf("%d", &T);
    while(T--){
        long long a, b, c;
        scanf("%lld%lld%lld", &a, &b, &c);
        if(a + b > c){
            printf("%Case #%d: true\n", tcase++);
        }else{
            printf("Case #%d: false\n", tcase++);//先输出在进行自增操作,所以在第一个循环是输出的还是初值1
        }
    }
    return 0;
}
posted @ 2021-07-17 12:31  shiff  阅读(49)  评论(0编辑  收藏  举报