OJ平台输入输出注意事项 您所在的位置:网站首页 oj平台格式错误是什么意思 OJ平台输入输出注意事项

OJ平台输入输出注意事项

2023-10-08 08:13| 来源: 网络整理| 查看: 265

文章目录 输入输出多组数据的处理输入不给你说有几组输入给你说输入几组不给你说有几组输入,但是会有一个特殊输入作为结束标志。 输出两组数据之间没有空行两组数据之间存在空行输出之间有空行

输入输出 多组数据的处理

由于ACM竞赛题目的输入数据和输出数据一般有多组(不确定),并且格式多种多样。在输入和输出的格式上,跟学校的C语言作业是不一样的。C语言作业一般都是一组数据的处理,但OJ平台一般都是多组数据的处理(不要感觉加一个循环就行)。例如:

//请计算这个梯形的面积 #include int main() { int a,b,c,S;//a为上底,b为下底,c为高 printf("请依次输入梯形的上底,下底,高:"); scanf("%d%d%d",&a,&b,&c); S=(a+b)*c/2; printf("所求梯形的面积为:%d",S); return 0; }

通过运行和计算可以看出,这道题只需要进行一次数据的输入,程序就结束了。 OJ平台的一个程序是需要进行多组数据的输入输出的。例如: (题目:HDU1000) 在这里插入图片描述

#include int main() { int a,b; while(scanf("%d%d",&a,&b)==2) printf("%d\n",a+b); return 0; }

如果你提交的是下面的代码

#include int main() { int a,b; scanf("%d%d",&a,&b); printf("%d\n",a+b); return 0; }

OJ会因为无法再次进行数据的输入而直接判你为错。 那有的人就会说,如果是要求多组数据,那么我直接来一个死循环不就行了?那么OJ平台也会很简答粗暴的判你超时。就像下面这样:

#include using namespace std; int main() { int m,n; while(1) { scanf("%d%d",&m,&n); printf("%d\n",m+n); } return 0; }

不信的话,就可以提交一下。 下面介绍一下几种常见的数据的输入输出:

输入

核心内容:scanf函数的返回值是成功读取数据的个数

不给你说有几组输入

常见形式如下(HDU1089): (HDU1089) 这道题在C语言的角度来看,是极为简单的,只需要写出下面的代码即可:

#include int main() { int a,b; scanf("%d%d",&a,&b); printf("%d\n",a+b); return 0; }

但是在OJ上,这道题就是错的。因为它无法读入多组数据。应当写成

#include int main() { int a,b; while(scanf("%d%d",&a,&b)!=EOF) printf("%d\n",a+b); return 0; }

此处注意的是scanf的含义是成功读取数据的个数。 C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功(如果还不清楚就去查查EOF的含义),EOF的值为-1。 当然如果对EOF的理解不深刻的话,程序也可以写成下面的形式:

#include int main() { int a,b; while(scanf("%d%d",&a,&b)==2) printf("%d\n",a+b); return 0; }

假如OJ上有三组测试数据,据需要输入到程序中,那么下面的程序就可以正确的在程序运行结束之前输入OJ想要测试的数据。那么我们分析一下我们的第一个程序,首先进入while循环,因为我们输入的数据一直都是两个数,所以2!=-1因此在程序结束之前,循环会一直进行下去,直到OJ的测试数据结束。与C语言的思路写出的程序相比,这个程序不仅可以处理多组数据而且可以在程序结束的时候也可以顺利结束。 为什么还有后面的那个好处?因为有的人想使用循环去处理数据,那么就会有一个问题,就是程序该结束的时候不结束。

给你说输入几组

常见格式如下(HDU1090): 在这里插入图片描述 在程序的一开始就告诉你要输入几组数据,然后直接一个循环就行。

#include int main() { int n,i,a,b; scanf("%d",&n); for(i=0;i int a,b; while (scanf("%d%d",&a,&b)==2) { if(a==0&&b==0) break; printf("%d\n",a+b); } return 0; } 输出 两组数据之间没有空行

常见格式(HDU1089) 每一个输出对应一个输出,输出之间没有空行。 在这里插入图片描述 通过观察可以得知,两组数据之间不存在空行,输入的每一行对应输出的每一行。

两组数据之间存在空行

常见格式(HDU1095):一个输入对应一个输出,每个输出之间都有空行,每个输出之后都有空行。

在这里插入图片描述

#include int main() { int m,n,j,sum; while(scanf("%d%d",&m,&n)!=EOF) { sum=m+n; printf("%d\n\n",sum);//此处就是多打印出一个换行符 } } 输出之间有空行

一个输入对应一个输出,输出之间有空行(最后一组数据没有空行)。 常见格式(HDU1001): 在这里插入图片描述 处理方式有两种,个人感觉第一种好一点。 第一种:把最后一个特殊处理,前面每一组数据加两个换行符,最后一组数据加一个回车,把最后一个数据特殊处理。即: 在这里插入图片描述 第二种:把第一个特殊处理,把第一个正常输出一个数,不进行换行操作,但是在后续操作中,把前面一个换行符和下一个数据一同处理。 在这里插入图片描述

int a,b,sum = 0,i=1; while(scanf("%d",&b)!=EOF) { for(i =1;i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有