1011 A+B 和 C (15 分)
1011 A+B 和 C (15 分)
给定区间 [−2的31次方,2的31次方] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。
输入格式:
输入第 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
我的代码
#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;
}
思路
- 输入T,用以表示输入的数据组数,同时令tcase表示当前是第几组,初值为1.
- 对每组数据,判断A+B是否大于C:
- 若大于,则输出Case #%d: true,其中%d表示当前的tcase值
- 否则,输出Case #%d: false。
- 注意点:如果要执行T次循环,除了使用for之外,更简洁的写法是while(T--),但是不要用while(--T).这种写法是T-1次,而不是T次。
- int类型加起来之后会超过范围,所以abc都要用long long类型,并且输出输入格式是%lld
参考代码
- 只使用了一个循环,把输入和输出放在了一个循环里面。简洁了代码,学习!!
- 不需要使用数组,因为用了while函数没有i这个参数了,可以在循环内就进行运算一组组来。
- 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;
}