HDU 1.1.1解题报告

来源:互联网 发布:淘宝商店怎么开通花呗 编辑:程序博客网 时间:2024/05/24 06:38

作为整个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

这两种方式在之后的题中都有重要应用。

0 0