• 欢迎访问C语言网www.dotcpp.com 比赛栏每月有奖月赛!举办比赛联系QQ:2045302297
  • 问题反馈、粉丝交流 QQ群327452739 蓝桥杯训练群:113766799 申请群时请备注排名里的昵称
  • C语言研究中心 为您提供有图、有料、解渴的C语言专题! 欢迎讨论!

『ACM入门』蓝桥杯ACM训练系统基本输入输出教程

技术专题 CTO 76838次浏览 10个评论

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

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

OJ简介:

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

轻量级入门OJ  ACM训练平台:http://www.dotcpp.com

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

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

 

A+B Ⅰ

这种输入的典型题目就是A+Bhttp://www.dotcpp.com/oj/problem1085.html

此题只要求用户求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;
}

A+BⅡ

依然是A+B,我们可以看一下这道题http://www.dotcpp.com/oj/problem1086.html

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

2

1 5

10 20

输出为:

6

30

 

此题相比第一道而言,会提前告诉你是几组数据,第一行的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;
}

A+B Ⅲ

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

http://www.dotcpp.com/oj/problem1087.html

参考答案:

#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;
}

A+B Ⅳ

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

样例输入:

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;
}

总结:

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

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

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

 

 

DJTU2012年退役Acmer

C语言研究中心(www.dotcpp.com)

C语言网提供「C语言、C++、算法竞赛」在线课程,全部由资深研发工程师或ACM金牌大佬亲授课,更科学、全面的课程体系,以在线视频+在线评测的学习模式学习,学练同步,拒绝理论派,真正学会编程!还有奖学金等增值福利等你!

C语言网, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明『ACM入门』蓝桥杯ACM训练系统基本输入输出教程
喜欢 (476)
[jinyangH@aliyun.com]
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
(10)个小伙伴在吐槽
  1. get 非常感谢
    追梦2017-04-24 12:06 回复
  2. 膜拜~
    菜籽油2017-04-27 17:14 回复
  3. very good!!很好~
    家家2017-08-20 18:47 回复
  4. 这个写的是真的不错!!!
    C之缘2018-07-06 23:48 回复
  5. 小白我还得努力啊 不懂的太多了
    00232018-07-20 17:19 回复
  6. 感谢,总结的很全面
    HuangLiang2019-01-11 21:09 回复
  7. 卡看不懂啊,没学过得我来学c语言了
    疾影2019-04-06 13:28 回复
  8. 很不错的
    白利军2020-02-22 16:59 回复
  9. 这个c语言网做得很好,还有这么基础的知识,案例丰富
    dd2020-10-23 09:31 回复
  10. 牛哇牛哇
    喵喵2021-06-18 22:54 回复