刷题笔记:PAT-B1011-A+B 和 C (15 分)

刷题笔记:PAT-B1011-A+B 和 C (15 分)
题目

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

输入

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

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
我的做法
  1. 定义一个结构体,四个数组成,A,B,C和结果,大于就存1,小于就存0;
  2. 依次按照输入为结构体数组赋值;
  3. 遍历输出;
#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接受参数。

答案普遍采用三个相同大小的数组完成存储,本质上我觉得差不多,先存储,再遍历。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值