OJ系统(ACM/NOI)的基本输入输出教程

在介绍OJ系统之前,首先为大家介绍一下ACM:

ACM原代表美国计算机协会,因其举办的ICPC即国际大学生程序设计竞赛而闻名全世界,此项赛事要求学生的在五小时内解决全英文问题,并在效率和速度以及代码的审查上要求非常严格以至近乎苛刻,被誉为是计算机界的“奥林匹克”。在大学中,因其含金量、认可度等非常之高,故而在大学生名企就业、保研、留学等方面都有着极大的帮助。ACM也因其独有的比赛趣味也在今天的高校中也得到了广泛的推广,许多大学生都为之着迷、甚至大学四年都为之献身。足以说明ACM的魅力所在。

OJ简介:

ACM比赛中主要以OJ(即Online Judge)判题为主,用来在线检测程序的正确性。OJ采用后台黑箱测试,测试数据非常全面,涵盖各种特殊情况。并且在结果的比对上也不放过一个空格和回车,这就要求程序员要有非常严谨的思维。著名的OJ有POJ、HOJ、UVA等。

轻量级入门OJ ACM训练平台:www.clang.cc

在各大OJ的ACM比赛赛题上,往往都会给出问题的描述(Description)、问题的输入和输出要求,并会给出几组样例数据。所以选手要在完全理解的基础上至少通过了样例数据才再提交代码。

下面我们介绍几种常见的输入输出格式。

A+B Ⅰ

这种输入的典型题目就是A+Bhttp://www.clang.cc/oj/problem.php?id=1085

此题只要求用户求A+B的和,但此类题目往往说明测试数据有多组。则默认是到文件(后台测试用例在文件里)末尾结束。我们则可以采用循环的方式不断接收测试用例,并且每接收一组输出一组(不必全部输入再全部输出,因为OJ只比对一次最后的结果)。

参考C代码:

#include<stdio.h>int main(){	int a,b;	while(scanf(“%d%d”,&a,&b)==2)  //利用scanf的返回值
	{		printf(“%d\n”,a+b);
	}    return 0;
}1234567891012345678910

A+BⅡ

依然是A+B,我们可以看一下这道题http://www.clang.cc/oj/problem.php?id=1086

依然是求A+B,但它的输入数据为:

2

1 5

10 20

输出为:

6

20

此题相比第一道而言,会提前告诉你是几组数据,第一行的2就表示有两组数据。则此时我们可以考虑这样写:

#include<stdio.h>int main(){	int n;	int a,b;	scanf("%d",&n);	while(n--)
	{		scanf("%d%d",&a,&b);		printf("%d\n",a+b);
	}	return 0;
}1234567891011121312345678910111213

A+B Ⅲ

继续是A+B,不同的是题目中说明,有多组数据,但是以A和B都为0时结束,则此时,就要做判断。不能依然输出0。

http://www.clang.cc/oj/problem.php?id=1087

参考答案:

#include<stdio.h>int main(){	int a,b;	while(scanf("%d%d",&a,&b)==2) 
	{		if(a== 0 && b==0)			break;		printf("%d\n",a+b);
	}	return 0;
}123456789101112123456789101112

A+B Ⅳ

题目描述:此类题目是求n个数的和,输入为先输入一个数组n,然后后面跟n个数字,求这n个数字的和。同样有多组数据,当n=0时结束。题目链接http://www.clang.cc/oj/problem.php?id=1088

样例输入:

4 1 2 3 4

5 1 2 3 4 5

0

样例输出:

10

15

参考写法:

#include<stdio.h>int main(){	int n;	int sum,temp;	while(scanf("%d",&n) && n)
	{
		sum=0;		while(n--)
		{			scanf("%d",&temp);
			sum+=temp;
		}		printf("%d\n",sum);
	}	return 0;
}12345678910111213141516171234567891011121314151617

总结:

常见的ACM的输入输出格式如这些。

多组数据可能还会用到EOF、NULL这些宏。比如scanf、getchar、gets的返回值。

万变不离其宗,有些题目可能是这些格式的组合,亦或者是个别情况的变种,比如输出格式要求的变化等等,就需要各位ACMer灵活多变了。

2012年DJTU退役Acmer

原文发布于微信公众号 - 编程范(dotcpp)

原文发表时间:2015-04-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Vamei实验室

“不给力啊,老湿!”:RSA加密与破解

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

81410
来自专栏木东居士的专栏

程序员该如何管理后宫:皇后造更多小人(抽象工厂模式)

22350
来自专栏小狼的世界

Pandas 快速入门(二)

我们在进行数据处理时,拿到的数据可能不符合我们的要求。有很多种情况,包括部分数据缺失,一些数据的格式不正确,一些数据的标注问题等等。对于这些数据,我们在开始分析...

15920
来自专栏程序员互动联盟

【基础编程】侃侃数据结构与算法-扯扯概念

? 为啥扯淡,因为我们开发人员很少用到它,目前流行的android开发有数据结构么?没有,至少你在用api的时候基本上是看不见的。c++有在STL基本容器中s...

406130
来自专栏HansBug's Lab

1638: [Usaco2007 Mar]Cow Traffic 奶牛交通

1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec  Memory Limit: 64 MB Sub...

30970
来自专栏数据派THU

Python能让你上天?带你挖掘隐藏彩蛋~(附代码)

55540
来自专栏HansBug's Lab

3361: [Usaco2004 Jan]培根距离

3361: [Usaco2004 Jan]培根距离 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 16  S...

36150
来自专栏HTML5学堂

揭开身份证验证的神秘面纱

正则验证身份证号码 HTML5学堂:曾经一直觉得用正则验证身份证号码是很简单的~但是,当真正挖掘身份证号码的规则之后,才发现,想要写好一个正则验证也没有那么容易...

50050
来自专栏数据结构与算法

P2740 [USACO4.2]草地排水Drainage Ditches

题目背景 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水。这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间。因此,农夫约翰修建了...

32090
来自专栏lonelydawn的前端猿区

Node.js力破江苏网警刑侦科推理试题

月前,江苏网警 在微博发布了一套《2018年刑侦科目推理试题》,可谓难倒了诸多英雄好汉,评论区内更是一片皮皮之音。 @二向箔icon: 高考前班主任教过我们,...

35470

扫码关注云+社区

领取腾讯云代金券