刷题笔记:PAT-B1011-A+B 和 C (15 分)
题目
给定区间 [−231,231] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。
输入
输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。
4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
输出
对每组测试用例,在一行中输出 Case #X: true
如果 A+B>C,否则输出 Case #X: false
,其中 X
是测试用例的编号(从 1 开始)。
Case #1: false
Case #2: true
Case #3: true
Case #4: false
我的做法
- 定义一个结构体,四个数组成,A,B,C和结果,大于就存1,小于就存0;
- 依次按照输入为结构体数组赋值;
- 遍历输出;
#include<stdio.h>
struct numTeam{ //定义结构体
int n1;
int n2;
int n3;
int result;
};
int main(){
int a;
scanf("%d",&a); //循环次数
numTeam team[a]; //定义一个结构体numTeam数组
for(int i=0;i<a;i++){ //赋值
scanf("%d %d %d",&team[i].n1,&team[i].n2,&team[i].n3);
if(team[i].n1+team[i].n2>team[i].n3){ //根据比较结果为最后结果赋值
team[i].result=1;
}else{
team[i].result=0;
}
}
for(int i=0;i<a;i++){ //遍历输出
if(team[i].result){
printf("Case #%d: true\n",i+1);
} else{
printf("Case #%d: false\n",i+1);
}
}
return 0;
}
分数结果
一个测试点正确,得九分。
看答案修改后AC成功
主要修改两处地方,如注释;
#include<stdio.h>
struct numTeam{
long long n1; //改为long long类型
long long n2;
long long n3;
int result;
};
int main(){
int a;
scanf("%d",&a);
numTeam team[a];
for(int i=0;i<a;i++){
scanf("%lld %lld %lld",&team[i].n1,&team[i].n2,&team[i].n3);
//接收long long参数,改为%lld!!!
if(team[i].n1+team[i].n2>team[i].n3){
team[i].result=1;
}else{
team[i].result=0;
}
}
for(int i=0;i<a;i++){
if(team[i].result){
printf("Case #%d: true\n",i+1);
} else{
printf("Case #%d: false\n",i+1);
}
}
return 0;
}
总结
在总体上的思路没有问题,代码逻辑也没有问题。
但是对数据的大小敏感度不够,不知道应该及时的使用long long型,不知道用%lld接受参数。
答案普遍采用三个相同大小的数组完成存储,本质上我觉得差不多,先存储,再遍历。