Advertisement

杭电ACM 1000:A+B Problem

阅读量:

这篇博客详细记录了我在杭电ACM平台上的刷题经历。通过练习编程题目来提升解决实际问题的速度和准确性。学习并非无目的的行为;它只是为了让自己变得更加卓越。

原题回顾

Problem Description

Calculate A + B

Input

Each line will contain two integers A and B. Process to end of file.

Output

For each case, output A + B in one line.

Sample Input

1 1

Sample Output

2

看起来很简单的一道题目,在线平台上传交作业时需要确保代码无误。对于学过C语言的人来说,编写相应代码并不困难。然而,在线系统对提交的要求非常高,仍然存在一定的挑战性。

NO.1 错误点一

大家很容易写出如下类似普遍错误的代码:

复制代码
    #include <stdio.h>
    int main(void)
    {
    int a,b;
    scanf("%d%d",&a,&b);
    printf("%d\n",a+b);
    return 0;
    }

当你信心满满的将上述代码提交之后发现结果是wrong answer,什么原因呢?那就怪自己看题太粗心,再看看我们题目描述**“For each case”** ,貌似自己的代码没有这个功能体现吧,在这里不只是一个测试用例,而是很多个,怎么体现可以使用很多个用例呢?当然是循环了,必须将输入输出语句用循环括起来。然后再把改过后的代码进行提交,发现结果是另一种报错**“Output Limit Exceeded ”** ,看吧,有没有崩溃的感觉,这么简单的一道题竟然弄了几次还不对,顿时感觉自己弱爆了吧。下面正是我们的另一个错误。

NO.2 错误点二

每当遇到困惑时

复制代码
    scanf("%d %d",&a,&b);
  • 若a和b均被成功读入,则 scanf函数的返回值为2。
  • 仅当a被成功读入时,该函数的返回值为1。
  • 若无a或b的输入,则该函数的返回值是0。
  • 在发生错误或到达文件末尾时,函数会返回 EOF 值。
    且最终输出结果类型定为整数类型。

所以我们的代码中在读取流的时候必须有EOF判断,EOF其实是一个宏,他的值为-1。
好了,这是这道题常见的两种错误,做错了不要紧,积累经验,将知识慢慢捡起来你就成功了。正确的代码如下:

复制代码
    #include <stdio.h>
    
    int main(void)
    {
    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF)
    {
    printf("%d\n",a+b);
    }
    return 0;
    }

当你看到结果是Accept,一种自豪感油然而生。

全部评论 (0)

还没有任何评论哟~