作为整个steps的第一个题,延续了各大OJ的优良传统,是一个最基本的A+B Problem( 别问我怎么知道这个的,各个OJ我只做了A+B OTZ)
但是这个题我竟然没有一次过掉,原因在于,too young too simple,第一次读description没有经验,根本没有读出来题目的意思。
我第一次是这样写的
#include <iostream>
using namespace std;
int main()
{
cin>>a>>b;
cout<<a+b<<endl;
return 0;
}
想的太简单了,读一组数据输出一个和以为就没了。。实际上这个题的本意要求的是不断进行A+B的读入,直到系统不输入值之后才算结束(不光这道题,step中所有的题都是这样)。所以正确的程序应该是这样
#include <iostream>
using namespce std;
int main()
{
int a,b;
while(cin>>a>>b)
cout<<a+b<<endl;
return 0;
}
while(cin>>a>>b)保证了在系统输入终止符Ctrl+Z(是叫这个么?我自己起的)之前,一直在有a和b的读入和a+b的输出,这样才可以accepted。
另附上c语言ac代码
#include <stdio.h>
int main ()
{
int a,b;
while(scanf(“%d%d",&a,&b)!=EOF)
printf("%d\n",a+b)
return 0;
}
这里出现了EOF,它是什么呢?百度上长篇大论的定义我就不贴了,简要说来,在stdio.h下,#define EOF=-1。而在scanf()函数中,如果a和b都被成功读入,那么scanf的返回值就是2;如果只有a被成功读入,返回值为1;如果a和b都未被成功读入,返回值为0;如果遇到错误或遇到end of file,返回值为EOF,且返回值为int型。所以始终有a,b读入时,while循环便可一直进行下去。
本题最大的收获在于,对于c++和c中的数据读入方式有了新的了解。重点就在于while(cin>>a>>b)和while(scanf("%d%d",&a,&b)!=EOF or ==1 or ==2
这两种方式在之后的题中都有重要应用。