ACM第01讲-A-竞赛入门课件_第1页
ACM第01讲-A-竞赛入门课件_第2页
ACM第01讲-A-竞赛入门课件_第3页
ACM第01讲-A-竞赛入门课件_第4页
ACM第01讲-A-竞赛入门课件_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ACM程序设计竞赛7/20/20231第一讲ACM入门(IntroductiontoACM)7/20/20232如何入门呢?7/20/20233ACM题目特点:

由于ACM竞赛题目的输入数据和输出数据一般有多组(不定),并且格式多种多样,所以,如何处理题目的输入输出是对大家的一项最基本的要求。这也是困扰初学者的一大问题。 下面,分类介绍:7/20/20234先看一个超级简单的题目:Sampleinput:151020Sampleoutput:6307/20/20235初学者很常见的一种写法:#include<stdio.h>voidmain(){inta,b;scanf(“%d%d”,&a,&b);Printf(“%d”,a+b);}7/20/20236有什么问题呢?这就是下面需要解决的问题7/20/20237基本输入输出输入_第一类:输入不说明有多少个InputBlock,以EOF为结束标志。

参见:HDOJ_10897/20/20238Hdoj_1089源代码:#include<stdio.h>intmain(){

inta,b;

while(scanf("%d%d",&a,&b)!=EOF) printf("%d\n",a+b);}

7/20/20239本类输入解决方案:C语法: while(scanf("%d%d",&a,&b)!=EOF) {

....

}C++语法: while(cin>>a>>b)

{

....

}7/20/202310说明(1):Scanf函数返回值就是读出的变量个数,如:scanf(“%d%d”,&a,&b);

如果只有一个整数输入,返回值是1,如果有两个整数输入,返回值是2,如果一个都没有,则返回值是-1。EOF是一个预定义的常量,等于-1。7/20/202311输入_第二类:输入一开始就会说有N个InputBlock,下面接着是N个InputBlock。

参见:HDOJ_10907/20/202312Hdoj_1090源代码:#include<stdio.h>intmain(){intn,i,a,b; scanf("%d",&n);for(i=0;i<n;i++){ scanf("%d%d",&a,&b); printf("%d\n",a+b);}}7/20/202313本类输入解决方案:C语法: scanf("%d",&n); for(i=0;i<n;i++)

{

....

}C++语法: cin>>n;

for(i=0;i<n;i++)

{

....

}7/20/202314输入_第三类:输入不说明有多少个InputBlock,但以某个特殊输入为结束标志。 参见:HDOJ_10917/20/202315Hdoj_1091源代码:#include<stdio.h>intmain(){ inta,b;

while(scanf("%d%d",&a,&b)&&(a!=0||b!=0)) printf("%d\n",a+b);}

7/20/202316本类输入解决方案:C语法: while(scanf("%d",&n)&&n!=0) {

....

}C++语法: while(cin>>n&&n!=0)

{

....

}7/20/202317输入_第四类:以上几种情况的组合7/20/202318输入_第五类:输入是一整行的字符串的

参见:HDOJ_10487/20/202319本类输入解决方案:C语法:

charbuf[20];

gets(buf);C++语法: 如果用stringbuf;来保存: getline(cin,buf); 如果用charbuf[255];来保存:

cin.getline(buf,255);7/20/202320说明(5_1):scanf(“%s%s”,str1,str2),在多个字符串之间用一个或多个空格分隔;若使用gets函数,应为gets(str1);gets(str2);字符串之间用回车符作分隔。通常情况下,接受短字符用scanf函数,接受长字符用gets函数。而getchar函数每次只接受一个字符,经常c=getchar()这样来使用。7/20/202321说明(5_2):cin.getline的用法:getline是一个函数,它可以接受用户的输入的字符,直到已达指定个数,或者用户输入了特定的字符。它的函数声明形式(函数原型)如下: istream&getline(charline[],intsize,charendchar='\n');不用管它的返回类型,来关心它的三个参数:charline[]:就是一个字符数组,用户输入的内容将存入在该数组内。intsize:最多接受几个字符?用户超过size的输入都将不被接受。charendchar:当用户输入endchar指定的字符时,自动结束。默认是回车符。7/20/202322说明(5_2)续结合后两个参数,getline可以方便地实现:用户最多输入指定个数的字符,如果超过,则仅指定个数的前面字符有效,如果没有超过,则用户可以通过回车来结束输入。charname[4];cin.getline(name,4,'\n');由于endchar默认已经是'\n',所以后面那行也可以写成:cin.getline(name,4);7/20/202323思考:以下题目属于哪一类输入?7/20/202324输出_第一类:一个InputBlock对应一个OutputBlock,OutputBlock之间没有空行。

参见:HDOJ_10897/20/202325解决方案:C语法: {

....

printf("%d\n",ans); }C++语法: {

...

cout<<ans<<endl;

}7/20/202326输出_第二类:一个InputBlock对应一个OutputBlock,每个OutputBlock之后都有空行。

参见:HDOJ_10957/20/2023271095源代码#include<stdio.h>intmain(){inta,b; while(scanf("%d%d",&a,&b)!=EOF) printf("%d\n\n",a+b);}7/20/202328解决办法:C语法: {

....

printf("%d\n\n",ans); }C++语法: {

...

cout<<ans<<endl<<endl;

}7/20/202329输出_第三类:一个InputBlock对应一个OutputBlock,OutputBlock之间有空行。

参见:HDOJ_10967/20/2023301096源代码#include<stdio.h>intmain(){inticase,n,i,j,a,sum;scanf("%d",&icase);for(i=0;i<icase;i++){ sum=0;scanf("%d",&n); for(j=0;j<n;j++) { scanf("%d",&a);sum+=a; } if(i<icase-1) printf("%d\n\n",sum);else printf("%d\n",sum);}}7/20/202331解决办法:C语法: for(k=0;k<count;k++)

{

while(…)

{

printf("%d\n",result);

}

if(k!=count-1)printf("\n");

}

C++语法: 类似,输出语句换一下即可。7/20/202332思考:以下题目属于哪一类输出?7/20/202333附:初学者常见问题7/20/202334一、编译错误Main函数必须返回int类型(正式比赛)不要在for语句中定义类型__int64不支持,可以用longlong代替使用了汉语的标点符号itoa不是ansi函数能将整数转换为字符串而且与ANSI标准兼容的方法是使用sprintf()函数intnum=100;

charstr[25];

sprintf(str,"%d",num);

另外,拷贝程序容易产生错误7/20/202335下面的hdoj1089为什么CE?#include<stdio.h>intmain(){inta,b; while(scanf("%d%d",&a,&b)!=EOF) printf("%d\n",a+b);}

7/20/202336二、小技巧数据的拷贝(特别是输出的提示信息)调试的sampleinput的拷贝7/20/202337三、C语言处理“混合数据”的问题

7/20/202338常见的代码: ……scanf("%d\n",&icase);for(i=0;i<icase;i++){scanf("%c%d%d",&opera,&num1,&num2);……}……7/20/202339相关资料7/20/202340学习方式练习->总结->练习->总结->……杭电ACM论坛google、baidu7/20/2023417/20/202342常见问题:1、需要什么基础?(C/C++)4、可以退课吗?(Ofcourse!)3、如何加入集训队?2、英语不好怎么办?(问题不大)7/20/202343课后任务:1、熟悉2、完成以上提到的在线练习:3、学有余力,可以尝试下面题目: 1016-1018、1013、1061 1170、2000-20437/20/202344经常不断地学习,你就什么都知道。你知道得越多,你就越有力量StudyConst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论