编程能力提高--------ACM/OJ机试快速入门篇

目录:

1、OJ上做题,可能遇到的反馈信息及其原因分析

2、EOF详解(OJ入门必须理解之)

3:OJ系统推荐

进入正题============》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

一、可能收到的反馈信息包括:

1、Compile Error :程序不能通过编译。

      代码本身语法、代码中使用某些库函数却没添加头文件。我们可以根据反馈回来的编译错误信息来改正这些错误。

2、Runtime Error :程序运行过程中出现非正常中断。

      这是代码编译正常情况下,运行时出错了。一般遇到这种情况,应检查一下几个方面:(1)代码中的数组是否足够长,以防开辟的空间不足以存储数据。特别注意的是字符串结束符’\0’也需要占用一个单位的数组空间。(2)检查代码中是否存在内存空间误用。数组越界等情况。(3)指针使用不当,没有初始化或者指针指向的位置与本程序无关,都会造成运行错误。

3、Time Limit Exceeded:运行超过时限还没有得到输出结果。

      每个上机的题目都有一个时间限制,比如1s。一般碰到时间超限应该对自己的代码进行以下几个方面的检测:(1)代码中是否使用freopen这个库函数,这个函数进行本地的文件输入,提交代码前一定把它删掉,否则就会造成时间超限。(2)有限情况下用scanf输入的时候,要判断其返回值是不是等于EOF,也就是判断是不是读到了文件尾。如果该使用EOF的时候没有用它,可能造成超限。(3)所选择的算法的效率也是造成超时的一个重要原因,应该对已有的代码进行优化;比如代码中有一些需要重复用到的计算结果,那么最好分配数组或变量将他们保存下来,在下次用的时候直接拿来用就可以了,不用再算一遍。以斐波那契数列来说,若用递归方式求解,往往就会超时。所以代码中如果用到递归,那么很有可能因为递归的层数太多而超时。应尽量不用递归方法,如果真的需要用到递归,也要对递归调用做优化,减少递归层数。(4)当代码中使用循环的时候,往往会因为循环变量设置不当,没有累加,或者判定条件没有设定正确造成时间超限,应该思考循环跳出的临界情况。

4、Wrong Answer :答案错误。

      (1)检查是否安装题目要求的格式输出结果,输出的大小写是否正确。如题目要求输出“Yes”,而你输出的是“yes”。

      (2)检查你的代码是不是按照多组测试数据来编写的。在代码处理多组测试数据的时候,有些变量要在进行下一次数据处理之前还原为原先的初始值,如果没有还原,那么也可能得到错误的答案。

5、PresentationError :输出格式不对

      可检查空格、回车等等细节。很多题目要求输出的n个数据或数据块之间是n-1个空格或空行隔开。

      如何控制空格或者空行的输出呢?有两种方式可供选择,一种是在数据之前输出空格,那么在每行的第一个数据之前不应该输出空格;另一种方式是在数据之后输出空格,那么在每行的最后一个数据之后不应该输出空格。

第一种控制方案如下:

for(int i=0;i
第二种控制方案如下:
for(int i=0;i

第三种控制方案如下:

int first=1;    //标志变量
for(int i=0; i


6、Accepted :评测结果正确。恭喜恭喜!

 

二、EOF详解

      在上机考试时,有很多时候题目并没有告诉你具体要输入多少组数据,这个时候就要用到EOF(end of file)这个东西,也就是文件尾。系统的测试数据都是放在文件中的,因此,如果题目没有具体说明输入多少组数据时,肯定是指要遇到文件尾才能结束。EOF是一个预定义的常量,等于-1。scanf函数返回值就是读出的变量个数,如:scanf( “%d%d”, &a, &b );如果只有一个整数输入,返回值是1,如果有两个整数输入,返回值是2,如果一个都没有,则返回值是-1。

//C语法格式:
         while(scanf("%d%d",&a,&b) != EOF)
         {     .... }
//C++语法格式:
while( cin>> a >> b )
{    ....      }

//很多OJ系统的第一题,两数求和
#include 
int main()
 {
    int a,b;
    while(scanf("%d%d",&a, &b) != EOF)
        printf("%d\n",a+b);
 }


三、OJ系统推荐

1、北京大学的OJ。POJ上面的题目有点老了,但好处是做的人多,经典算法题多,解题报告也多,适合上手。http://poj.org//

2、浙江大学的OJ:http://acm.zju.edu.cn/onlinejudge//

3、ACM俱乐部OJ:里面题目丰富,题目分类清晰,难度梯度分配很好,适合入门和考研复试机试。http://zju.acmclub.com/index.php?app=problem_list&expanded=3

4、杭州电子科技大学的OJhttp://acm.hdu.edu.cn/

5、九度OJ:里面含有各大高校历年考研复试上机题目,对于准备复试的同学很有用。http://ac.jobdu.com/

6、找工作、找实习的同学可以去Leetcode和牛客网刷题,很多大公司的面试和机试题目。

你可能感兴趣的:(编程提高)