Cone
写博客是一个输出的过程,对于自己学习的一个总结,从这篇博客开始,以后坚持写博客,把踩过的坑以及总结记录下来,以后自己还可以慢慢看 回忆大学四年学习历程。
总结一下踩过的坑:第一次开始接触杭电1000题,C语言语法才掌握小部分,就开始刷题,1000题错了20多次,最后还是百度到的多组输入数据才过。
对于读题:那时候以为题目中的 A B N这种字母, 我的程序变量就要定义为A B N这种,这个显然是错的,变量是随便自己定义的。定义为 a,b都可以 例如 杭电1000题 定义为 int a,b; 然后使用a,b都可以。
对于输入和输出: 输入时要从键盘输入,输出通俗就打印结果在运行窗口上面,每输入一组数据 就打印一组结果,输入输出刚开始看也一知半解的。
Sample Input
1 5
10 20
Sample Output
6
30
例如这种,先输入1 和 5 在打印6 然后输入10 20 在打印30 。
对于AC:oj系统后台很多测试数据,你的程序要通过全部的测试数据才能AC
入门:杭电1000 A+B
题目: 要求输入多组数据到程序结束。
这种多组数据输入需要用到!=EOF 或者~ 这种格式 例如:
//!=EOF 情况
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
}
// ~ 情况
while(~scanf("%d%d",&a,&b))
{
}
两种方法可以达到同一效果。还有其他方法,这里就不列举。掌握这两种情况 对于以后这种多组数据输入题目就可以处理解决。
输出:要求每一行输出一个测试数据答案。即加上一个换行符(‘\n’)就可以轻松解决
//假设sum 为输出结果
printf("%d\n",sum);
输入情形
一、要求输入N组测试数据 :
Input
Input contains an integer N in the first line, and then N lines follow. Each line consists of a pair of integers a and b, separated by a space, one pair of integers per line.
// 这种情况 要用到循环, 我用的是while 这种循环
int N;
while(N--)
{
}
二、要求输入数据到为0结束:
Input
Input contains multiple test cases. Each test case contains a pair of integers a and b, one pair of integers per line. A test case containing 0 0 terminates the input and this test case is not to be processed.
//这种为0的情况处理,我用的跳出循环语句:break
int a,b;
while(~scanf("%d%d",&a,&b))
{
if(a == 0 && b == 0)
{
break;
}
}
这是两个数为0的情况, 一个数为0的情况 去掉一个 b == 0 即可,多个数据为0 也是同样处理
三、要求输入多组数据,输出结果中一空行隔开:
Input
The input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line.
Output
For each pair of input integers a and b you should output the sum of a and b, and followed by a blank line.
// 多加一个\n即可解决
//假设sum为输出结果
printf("%d\n\n",sum);
四、要求输入N组数据,每个输出结果之间以空行隔开。注意是输出结果之间,最后一组数据不要空行
Input
Input contains an integer N in the first line, and then N lines follow. Each line starts with a integer M, and then M integers follow in the same line.
Output
For each group of input integers you should output their sum in one line, and you must note that there is a blank line between outputs.
//采用if判断
int t;
scanf("%d",&t);
while(t--)
{
if(t!=0)
{
printf("\n");
}
}
最后oj系统的提交结果出现的情况:
Accepted (正确)
当你在某一ACM在线测评系统上提交了你的代码后,如果你得到了一个Accepted,简称AC,恭喜你,通过了这道题,你的代码是正确的。除了Accepted之外的所有结果,都是不符合要求的。
Compile Error(编译错误)
简称CE。通常是指语法错误,这是最最简单的错误了,因为你完全可以在提交之前,在本地的编译器上测试出来,然后改正。
Wrong Answer(错误)
简称WA。很多ACM新手们,在千辛万苦写好一份代码并且自认为是正确的,但是提交之后却得到了Wrong Answer的结果,他们百思不得其解,其实,OJ的后台有很多组测试数据,就算你的代码可以通过样例,但并不代表可以通过后台的所有数据,只要你有一组数据输出与测试输出不一样,你就无法AC。所以建议同学们,可以自己脑补一些特殊数据,看看是否能够得到正确的结果。除此之外,还要再次认真读题,很多时候Wrong Answer都是因为没有正确理解题目的意思。
Presentation Error(格式错误)
简称PE。这种错误还是比较容易发现并改正的,通常产生的原因是由于你的代码输出的格式与题目要求的不一致。
常见的PE有以下几种:
1、大小写错误
2、行末不应该有空格
3、分号 冒号 逗号等中英文标点符号傻傻分不清
4、换行和空格乱用
Time Limited Exceed(超时)
简称TLE。通常需要进行算法优化来降低时间复杂度,加快代码运行的时间。
常见的TLE有以下几种情况:
1、程序中出现无法终止的死循环
2、读取输入流和输出流的时间太长。(C++的输入输出中,cin和cout没有scanf和printf快,不要问我是怎么知道的,我都已经在输入输出上载过无数跟头了….建议同学们养成用scanf和printf的好习惯)
3、时间复杂度大,常常是多层循环或者深递归导致。建议大家能不用循环的时候,就不用循环,因为循环费时。
Runtime Error(运行错误)
简称RE。这种错误也是好避免的。
常见的RE有以下几种:
1、数组开得太小了,导致访问到了不该访问的内存区域
2、发生除零错误
3、大数组定义在函数内,导致程序栈区耗尽
4、指针用错了,导致访问到不该访问的内存区域
5、程序抛出了未接受的异常