您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > ACM输入输出介绍.
2020/1/111ACM程序设计输入输出格式2020/1/112ACM题目特点由于ACM竞赛题目的输入数据和输出数据一般有多组(不定),并且格式多种多样,所以,如何处理题目的输入输出是对大家的一项最基本的要求。这也是困扰初学者的一大问题。下面,分类介绍:2020/1/113一个超级简单的题目(ex-1):ProblemDescriptionYourtaskistocalculatea+b.InputTheinputwillconsistofaseriesofpairsofintegersaandb,separatedbyaspace,onepairofintegersperline.OutputForeachpairofinputintegersaandbyoushouldoutputthesumofaandbinoneline,andwithonelineofoutputforeachlineininput.Sampleinput151020Sampleoutput6302020/1/114初学者很常见的一种写法:#includestdio.hvoidmain(){inta,b;scanf(“%d%d”,&a,&b);Printf(“%d”,a+b);}2020/1/115有什么问题呢?这就是下面需要解决的问题基本输入输出2020/1/116输入第一类:输入不说明有多少个InputBlock,以EOF为结束标志。参见:ex-1.2020/1/117ex-1源代码:#includestdio.hintmain(){inta,b;while(scanf(%d%d,&a,&b)!=EOF)printf(%d\n,a+b);}2020/1/118本类输入解决方案:C语法:while(scanf(%d%d,&a,&b)!=EOF){....}C++语法:while(cinab){....}2020/1/119说明:1.Scanf函数返回值就是读出的变量个数,如:scanf(“%d%d”,&a,&b);如果a和b都被成功读入整数,那么scanf的返回值就是2;如果只有a被成功读入整数,返回值为1;如果a和b都未被成功读入整数,返回值为0;如果遇到错误或遇到endoffile,返回值为EOF2.EOF是一个预定义的常量,等于-1。2020/1/1110输入第二类:输入一开始就会说有N个InputBlock,下面接着是N个InputBlock。ex-2ProblemDescriptionYourtaskistocalculatea+b.InputInputcontainsanintegerNinthefirstline,andthenNlinesfollow.Eachlineconsistsofapairofintegersaandb,separatedbyaspace,onepairofintegersperline.OutputForeachpairofinputintegersaandbyoushouldoutputthesumofaandbinoneline,andwithonelineofoutputforeachlineininput.Sampleinput2151020Sampleoutput6302020/1/1111ex-2源代码:#includestdio.hintmain(){intn,i,a,b;scanf(%d,&n);for(i=0;in;i++){scanf(%d%d,&a,&b);printf(%d\n,a+b);}}2020/1/1112本类输入解决方案:C语法:scanf(%d,&n);for(i=0;in;i++){....}C++语法:cinn;for(i=0;in;i++){....}2020/1/1113输入第三类:输入不说明有多少个InputBlock,但以某个特殊输入为结束标志。ex-3ProblemDescriptionYourtaskistocalculatea+b.InputInputcontainsmultipletestcases.Eachtestcasecontainsapairofintegersaandb,onepairofintegersperline.Atestcasecontaining00terminatestheinputandthistestcaseisnottobeprocessed.OutputForeachpairofinputintegersaandbyoushouldoutputthesumofaandbinoneline,andwithonelineofoutputforeachlineininput.Sampleinput15102000Sampleoutput6302020/1/1114ex-3源代码:#includestdio.hintmain(){inta,b;while(scanf(%d%d,&a,&b)&&(a!=0&&b!=0))printf(%d\n,a+b);}上面的程序有什么问题?杜绝低级错误!2020/1/1115本类输入解决方案:如果最后一行是以一个0结尾则:C语法:while(scanf(%d,&n)&&n!=0){....}C++语法:while(cinn&&n!=0){....}2020/1/1116输入第四类:输入是一整行的字符串的参见:POJ_1298=1298SampleInputSTARTNSBFW,JAJSYXTKNRUTWYFSHJFWJYMJWJXZQYTKYWNANFQHFZXJXENDSTARTNBTZQIWFYMJWGJKNWXYNSFQNYYQJNGJWNFSANQQFLJYMFSXJHTSINSWTRJENDSTARTIFSLJWPSTBXKZQQBJQQYMFYHFJXFWNXRTWJIFSLJWTZXYMFSMJENDENDOFINPUT2020/1/1117本类输入解决方案:C语法:charbuf[20];gets(buf);C++语法:如果用stringbuf;来保存:getline(cin,buf);如果用charbuf[255];来保存:cin.getline(buf,255);2020/1/1118说明:scanf(“%s%s”,str1,str2),在多个字符串之间用一个或多个空格分隔;若使用gets函数,应为gets(str1);gets(str2);字符串之间用回车符作分隔。通常情况下,接受短字符用scanf函数,接受长字符用gets函数。而getchar函数每次只接受一个字符,经常c=getchar()这样来使用。2020/1/1119说明:cin.getline的用法getline是一个函数,它可以接受用户的输入的字符,直到已达指定个数,或者用户输入了特定的字符。它的函数声明形式(函数原型)如下:istream&getline(charline[],intsize,charendchar='\n');不用管它的返回类型,来关心它的三个参数:charline[]:就是一个字符数组,用户输入的内容将存入在该数组内。intsize:最多接受几个字符?用户超过size的输入都将不被接受。charendchar:当用户输入endchar指定的字符时,自动结束。默认是回车符。2020/1/1120说明续结合后两个参数,getline可以方便地实现:用户最多输入指定个数的字符,如果超过,则仅指定个数的前面字符有效,如果没有超过,则用户可以通过回车来结束输入。charname[4];cin.getline(name,4,'\n');由于endchar默认已经是'\n',所以后面那行也可以写成:cin.getline(name,4);2020/1/1121练习:以下题目属于哪一类输入?POJ_1423=1423POJ_1519=1519更多类型=1092=1093=10942020/1/1122输出的问题:一个InputBlock对应一个OutputBlock,OutputBlock之间空行。ex-4ProblemDescriptionYourtaskistocalculatethesumofsomeintegers.InputInputcontainsanintegerNinthefirstline,andthenNlinesfollow.EachlinestartswithaintegerM,andthenMintegersfollowinthesameline.OutputForeachgroupofinputintegersyoushouldoutputtheirsuminoneline,andyoumustnotethatthereisablanklinebetweenoutputs.Sampleinput3412345123453123Sampleoutput101562020/1/1123以下方法什么问题?C语法:{....printf(%d\n\n,ans);}C++语法:{...coutansendlendl;}2020/1/1124Ex-4正确源代码#includestdio.hintmain(){inticase,n,i,j,a,sum;scanf(%d,&icase);for(i=0;iicase;i++){sum=0;scanf(%d,&n);for(j=0;jn;j++){scanf(%d,&a);sum+=a;}if(iicase-1)printf(%d\n\n,sum);elseprintf(%d\n,sum);}}2020/1/1125解决办法:C语法:for(k=0;kcount;k++){while(…){printf(%d\n,result);}if(k!=count-1)printf(\n);}C++语法:类似,输出语句换一下即可。2020/1/1126思考:思考以下题目的输入格式=1016=10172020/1/1127初学者常见问题2020/1/1128编译错误Main函数必须返回int类型(正式比赛)不要在for语句中定义类型__int64不支持,可以用longlong代替使用了汉语的标点符号itoa不是ANSI函数能将整数转换为字符串而且与ANSI标准兼容的方法是使用sprintf()函数intnum=100;charstr[25];sprintf(str,%d,num);另外,拷贝程序容易产生错误2020/1/1129不常规的编程方式Printf和cout混用的问题以下的程序输出什么?#includestdio.h#includeiostream.hintmain(){intj=0;for(j=0;j5;j++){coutj=;printf(%d\n,j);}return0;}20
本文标题:ACM输入输出介绍.
链接地址:https://www.777doc.com/doc-2895933 .html