PAT乙级1011,用C语言进行编程,实现A+B和C的数值大小判断

今天要讲的这道题目呢,是收录在PAT乙级中的第1011题,非常简单的一道题目,但我在做这道题目的时候,还是犯了一点错,实在是不应该啊。

归根结底的原因在于我没有读清楚题目,做题目的时候太着急了,太注重结果了,非但没有提升速度,反倒是降低了做题的效率。

话不多说,我们先来看一下这道题目的要求。

题目要求如下

1、给定区间[-2^31,2^31]内的3个整数A、B和C,请判断A+B是否大于C。

看到这个题目要求,就一定要提及一下,注意,区间是[-2^31,2^31]。

我们一般知道的int类型的区间是多少,是[-2^31,2^31-1],与题目要求的是不是有差别。

那就是题目要求比int类型多了一个1,不要小看这个1,这就决定了我们最开始需要定义的数据类型了。

2、输入第一行给定的正整数T,该正整数要小于等于10,用于输入T个测试用例,随后给出T组测试用例,分别输入A、B和C,然后这三个正整数之间用空格隔开。

3、对每组测试用例,如果A+B>C的话,就输出Case #X: true,否则就输出Case #X: false,这里的X指代的是测试用例的数量为1、2、3等等。

最终输入与输出的结果末端不要空格,所以在最终写printf打印语句的时候,要特意摘出来写。

在清楚题目要求后,我们来画出一张流程图,来帮助我们更好地理解怎么来写该程序。

绘出流程图,理清楚程序逻辑

如上图所示,这就是该程序的流程图,当然,流程图的主要目的是为了帮助我们来理清楚整个程序的逻辑,至于代码的具体实现,for循环、最后一行的空格如何隐藏等等怎么写,还是需要我们自己来动手写的。

代码实现

根据该流程图,我们就能大致知道怎么来写代码了。

1、因为我们最开始看清楚题目,所以这里的变量类型不应该写int,而是应该用到double

2、输入的T要小于等于10,所以这里要做一个if条件语句的判断,如果满足该条件,则程序继续往下运行,如果不满足,可以加一个else让它重新输入,也可以不运行该程序。

3、输入T组测试用例,这里要用到数组来存储数据,因为我们最终的结果是需要一次性打印出来的,如果不用数组的话,就会出现最后输入的结果把之前要输入的结果全部覆盖的问题。

如上图所示,由于没有用数组的方法,导致所有需要测试的结果都为最后一组数据。

4、既然我们要用到的变量类型是double,而且要求输入与输出的结果都是整数的话,那输入scanf中又要变化了,应该为scanf("%lf",&A);

%d是表示int类型,可以显示整数的。

%f是表示double类型,可以显示小数的。

%lf是表示double类型,可以只显示整数的。

如上图所示,如果没有用double类型的话,只能够拿到一部分的分数。

5、最终一行要没有空格,我们来思考一下,怎么样会打印到最后一行呢。

是不是因为整个循环快结束的时候,也就是说要到快接近T的时候,就是快结束的时候。

由于i是从0开始的,直到T为止,且不包含T,那快接近T的时候就是T-1了,所以当i不等于T-1的时候,每次打印一条结果就需要换行了。

特定部分的代码块:

  if(i!=T-1){
                printf("\n");
                }//这一部分是要写在第二个for循环当中的。

总的代码块:

//A+B 和 C
#include<stdio.h>
int main(){
    int T;//第一行给出正整数T(<=10)
    scanf("%d", &T);
    double A[T];
    double B[T];
    double C[T];
    if(T<=10){
        for(int i = 0; i < T; i++){
            scanf("%lf %lf %lf",&A[i],&B[i],&C[i]);
            }
        for(int i = 0; i < T; i++){
            if(A[i]+B[i]>C[i]){
                printf("Case #%d: true",i+1);
            }
            else{
                printf("Case #%d: false",i+1);
            }
            if(i!=T-1){
                printf("\n");
                }
            }
        }
        else{
            scanf("%d", &T);
            }
    }

测试与验证结果

总结

总的来说,这道题目难度不大,关键在于仔细。

这么简单的一道题为什么我做了这么长时间,就是因为最开始的A、B和C这三个整数的范围没有看清楚,想当然地直接用int类型来表示它们了。

但其实这正是题目中设置的一个陷阱,所以还需再多练一些题目,以后就能够躲开这些陷阱了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值