ACM学习前的忠告.ppt
《ACM学习前的忠告.ppt》由会员分享,可在线阅读,更多相关《ACM学习前的忠告.ppt(29页珍藏版)》请在三一办公上搜索。
1、一些初学者必须要知道的问题,1.如何用C/C+处理输入输出2.复杂度和程序优化3.初学者如何进行修炼,1.如何用C/C+进行输入输出,相对次要的问题,但成为很多初学者的拦路虎C/C+(尤其是C)输入输出方法较复杂,需要一定时间实践才能精通我的任务:通过实例提供处理各种输入输出任务的方法,并讲解一些原则性的问题,同学们可以举一反三首先,几个基本概念,什么是标准输入、标准输出?标准输入(stdin):键盘(scanf,cin)标准输出(stdout):屏幕(printf,cout)建议程序中只使用stdin和stdout要打开文件怎么办?freopen(“input.txt”,“r”,stdin)
2、;freopen(“output.txt”,“w”,stdout);,ACM/ICPC中基本上都是要求从键盘输入,屏幕输出是人工评测?否,测试前程序被做了重定向,就向上面一样,只不过重定向是外部的比如,Linux Shell下$./prog output$diff output answer所以,严格按照题目描述来进行输入输出,不要打印任何题目未做要求的信息,ACM/ICPC的输入输出特点:流式、ASCII顺序输入、输出,避免使用文件定位函数(如:fseek)不需要把所有的输出放在一处进行,随时都可以输出,只要顺序是对的,因为只有当你的程序终止了,与正确答案的比较才会开始字符格式,12345是
3、5个字符1,2,3,4,5构成所以,C中只能使用处理ACSII文件的输入输出函数(getchar,putchar,scanf,printf,gets,fgets,puts),使用C+进行输入输出cin,cout优点数据类型自识别,使用简单缺点速度慢!ACM/ICPC的测试数据规模非常大,cin/cout在这种情况下会成为性能瓶颈,引发超时除非输入规模小,否则不推荐使用cin!输出规模相对较小,在某些情况下使用cout会很方便,但是cout控制输出格式不如printf灵活,一个重要的误区不要在一个程序中同时使用cin和C输入函数(如:scanf)也不要同时使用cout和C输出函数(如:print
4、f)但是,可以C输入函数和cout搭配使用,反之亦然违反以上原则可能导致输入/输出结果错误(会发生乱序)!,推荐使用C函数进行输入输出输出:printf(putchar,puts),其用法请查阅相关书籍,比较简单,不做重点讲解每一行输出完后要打印回车n,包括最后一行输入:scanf,fgets(gets),getcharscanf输入格式%d%lld%c%s%lf对每种格式搞清楚一个重要问题是否自动跳过前导空白?什么是空白:空格,TAB,回车,%d%lld%lf自动扫描前导空格比如:读入5个整数到A5输入文件中,数的排布是这个样子35 26 78 99206不管它,直接5次%dfor(int
5、i=0;i 5;i+)scanf(“%d”,A+i);%lld用于输入和输出长整数(long long,64位)%lf用于输入输出double,%s 读一个字符串,自动扫描前导空白,读到空白结束如:abcd efgh,将读出”abcd”%c读一个字符,但是不扫描前导空白如何读一个非空白字符呢?比如,读取某人的信息,其性别用M/F表示Nathan M FlyingClaire F Self-healing名字和能力用%s读,性别怎么办,自己扫描空格?麻烦!,读一个非空白字符,方法一char str2;scanf(“%1s”,str);/%s扫描前导空白,并且只读一个字符char c=str0;方
6、法二强制扫描空白在%前面加上一个空格表示“强制扫描前导空白”scanf(“%c”,同理,格式后面加一空格表示“读完这个变量后扫描空白”,注意空白是包括回车的读一行:gets,fgetsgets会导致很讨厌的warning message,所以可改用fgetsfgets(str,sizeof str,stdin)=gets(str)注意应使“下一个字符”处于这一行开头有n个整数在一行上,但是n不知,只知道整数是空格分开的,怎么读?拿getchar+ungetc扫描?麻烦!介绍一个函数:strtok,strtok示例5 38 29 38 28 58 82 58 char str100;char*i
7、nput=str,*token;gets(str);while(token=strtok(input,“)!=NULL)input=NULL;int number=atoi(token);/处理number,也可用istringstream处理istringstream in(str);while(in k)/处理k如果数据不多,不失为一个好办法学习C函数输入输出,尤其是各种格式串,最好查阅相关手册Linux$man 3 printf,2.复杂度和程序优化,复杂度计算出来后有什么用?估计程序能否在规定时间内处理题目指定规模的数据“规模”的举例给N个数排序规模:N判断字符串P是否是字符串T的子串
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ACM 学习 忠告
链接地址:https://www.31ppt.com/p-6501217.html