关于刷题入门(输入、输出格式)的总结

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有以下几种:

  • 大小写错误
  • 行末不应该有空格
  • 分号 冒号 逗号等中英文标点符号傻傻分不清
  • 换行和空格乱用

Time Limited Exceed(超时)

简称TLE。通常需要进行算法优化来降低时间复杂度,加快代码运行的时间。 
常见的TLE有以下几种情况:

  • 程序中出现无法终止的死循环
  • 读取输入流和输出流的时间太长。(C++的输入输出中,cin和cout没有scanf和printf快,不要问我是怎么知道的,我都已经在输入输出上载过无数跟头了….建议同学们养成用scanf和printf的好习惯)
  • 时间复杂度大,常常是多层循环或者深递归导致。建议大家能不用循环的时候,就不用循环,因为循环费时。

Runtime Error(运行错误)

简称RE。这种错误也是好避免的。 
常见的RE有以下几种:

  • 数组开得太小了,导致访问到了不该访问的内存区域
  • 发生除零错误
  • 大数组定义在函数内,导致程序栈区耗尽
  • 指针用错了,导致访问到不该访问的内存区域
  • 程序抛出了未接受的异常

 

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值