ACM题目中输入数据的处理(C语言版)见: http://blog.csdn.net/sxhelijian/article/details/8978794

   ACM竞赛题目的输入数据常要求有多组,并且格式多种多样,这是初次登OJ平台的同学的一个障碍。实际上,这些格式可以归为固定的几种类型,本文介绍各种类型的处理方法,以帮助同学们克服这些障碍。
  实际上,这些模式不仅是OJ平台上做题的需要。在平时的自由编程练习中,也可以自行使用这些模式,以提高调试程序的效率。对程序测试的意识也将在此过程中得到提升。
  本文1-4部分介绍了几种类型输入的处理,第5部分介绍通过输入重定向提高调试程序效率的方法。

1. 最简单的输入
例1:

Description
计算 a+b  Input
两个整数 a,b  Output
a+b的值  Sample Input
1 2  Sample Output
3  

  这种最简单的输入,接受一组输入,针对这组输入计算出值即可。这与平时的程序设计并无差异。解决办法是:

#include <iostream>
using namespace std;
int  main()
{  int a,b;  cin >> a >> b;  cout << a+b << endl;   //对其他题目,换成要求的复杂处理与输出  return 0;
}

2. 一次运行,要输入多组数据,直到读至输入文件末尾(EOF)为止
例2:

Description
计算 a + b  Input
多组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行   Output
每组的两个整数(a和b)求和并输出,每组的求和结果独占一行  Sample Input
1 5
10 20
400 516  Sample Output
6
30
916

  这种输入包含多对输入数据,需要构造一个循环读取。因为没有指出到底有多少对输入,要有办法判断输入何时结束。解决办法是:

#include <iostream>
using namespace std;
int main()
{  int a,b;  while(cin >> a >> b)  {  cout << a+b << endl;  }  return 0;
}   

  说明:当读到输入结束时,cin >> a >> b返回 0,循环也结束

3. 一次运行,要输入多组数据,组数由第一个输入数据决定(在开始的时候输入一个N,接下来是N组数据)
例3:

Description
计算 a + b  Input
第一行是数据的组数N,从第二行是N组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行   Output
每组的两个整数(a和b)求和并输出,每组的求和结果独占一行  Sample Input
2
1 5
10 20  Sample Output
6
30  

  需要先读入第一行确定组数N,而后写一次执行N次的循环进行处理即可。解决办法是:

#include <iostream>
using namespace std;
int main() {  int a, b, n;  cin >> n;  for(i=0;i<n;i++)  {  cin >> a >> b;  cout << a + b << endl;  }  return 0;
}  

4.  输入不说明有多少组数据,但以某个特殊输入为结束标志。平时做题中常见诸如“输入学生成绩,以-1结束”,没有学生得-1分的,这个结束数据可以要得。
例4:

Description
计算 a + b  Input
多组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行。当输入为 0 0 时,输入结束。  Output
每组的两个整数(a和b)求和并输出,每组的求和结果独占一行。  Sample Input
1 5
10 20
0 0  Sample Output
6
30

  构造循环对数据进行处理,将是否遇到了要求结束的输入,作为循环是否结束的依据。解决办法是:

#include<iostream>
using namespace std;
int main()
{  int a ,b;  while(cin>>a>>b&&(a||b))  {  cout<<a+b<<endl;  }  return 0;
}  

  有关字符和字符串数据的输入,在此不再多讲,只要将相关的函数用好即可,也可以找到相关资料参考。

5. 利用文件重定向提高调试效率
  编程得到正确结果前,往往需要多次运行程序,每次运行都需要花费不少的时间从键盘输入数据。每次输入的数据都是相同的时,会给人的心理带来不爽的感觉,并造成时间上的浪费。无论平时练习还是ACM竞赛实战,这些都是可以避免的。方法是,运用重定向。
  用下面的形式调用函数freopen()会将标准输入stdin重定向到文件input.txt(这个名字可以自己定义)。

freopen("input.txt","r",stdin);    //设置输入和输出文件  

  重定向后,原先从键盘(标准输入的默认设备)接受的输入,将统统从文件读取input.txt读取,这就是重定向。程序可以写作:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{  freopen("input.txt","r",stdin);  //只加这一句输入将被重定向到文件input.txt  int a,b;  cin>>a>>b;  cout<<a+b<<endl;  return 0;
}  

  于是,在运行程序前,将本该由键盘输入的数据,写到文件input.txt中。而在运行程序时,数据将不再需要人去输入。那个快,很享受。
  需要注意的是,调试通过的程序,千万不要直接提交到OJ平台上去。如果竞赛中这样做了,罚你的20分钟不要算到我的头上。提交的程序要把输入重定向的一行删除,这样才算是符合要求的,可以获得AC的程序。
  除了删除那一行,还有一种简单的做法是,提交前将这一行前加上注释符"//",效果是一样的。

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{  //freopen("input.txt","r",stdin);  //只加这一句输入将被重定向到文件input.txt  int a,b;  cin>>a>>b;  cout<<a+b<<endl;  return 0;
}

  还有用条件编译处理的方法,暂不讲了。

ACM题目中输入数据的处理(C++语言版)相关推荐

  1. ACM题目中输入数据的处理(C++版)

    ACM题目中输入数据的处理(C语言版)见:http://blog.csdn.net/sxhelijian/article/details/8978794 ACM竞赛题目的输入数据常要求有多组,并且格式 ...

  2. bnu1079 BNUEP的球迷 C语言版

    北京师范大学珠海分校 Judge Online of ACM ICPC 1079 BNUEP的球迷 C语言版 #include <stdio.h> #include <string. ...

  3. bnu1295 BNUEP的风云人物 C语言版

    北京师范大学珠海分校 Judge Online of ACM ICPC 1295 BNUEP的风云人物 C语言版 #include <stdio.h> int main(){ int i, ...

  4. bnu1258 神奇礼物盒 C语言版

    北京师范大学珠海分校 Judge Online of ACM ICPC 1258 神奇礼物盒 C语言版 #include <stdio.h> #include <string.h&g ...

  5. ACM题目和培养训练!!!

    ACM大量习题题库 ACM大量习题题库 现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库. USACO ht ...

  6. 大一新生能从ACM比赛中得到什么?

    写在前面: 大家都曾以新生的身份经历了大学的迷茫期--我们看见别人的成功,却无法窥见成功的道路.我们每天忙忙碌碌,疲于奔波,想要走自己的路,却又不自觉的模仿着他人.每年参加acm实践班的人如过江之鲫, ...

  7. PUK ACM题目分类

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  8. PTA 基础编程题目集 7-33 有理数加法 C语言

    PTA 基础编程题目集 7-33 有理数加法 C语言 本题要求编写程序,计算两个有理数的和. 输入格式: 输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范 ...

  9. PTA 基础编程题目集 7-24 约分最简分式 C语言

    PTA 基础编程题目集 7-24 约分最简分式 C语言 分数可以表示为分子/分母的形式.编写一个程序,要求用户输入一个分数,然后将其约分为最简分式.最简分式是指分子和分母不具有可以约分的成分了.如6/ ...

最新文章

  1. class没有发布到tomcat_SpringBoot内置tomcat启动原理
  2. Mysql取得分组的前n名
  3. 关于标准库中的ptr_fun/binary_function/bind1st/bind2nd
  4. lambda中使用filter过滤
  5. NanoLog软件架构
  6. 如何使用PowerShell创建简单SQL Server数据库登录对话框
  7. 泰克示波器截屏软件-Tektronix示波器上位机-OpenChoice安装。示波器波形发文章论文
  8. Python 常用命令
  9. 嵌入式工具——strace
  10. mysql数据库java驱动下载(jdbc)
  11. k8s mysql 弹性_k8s 弹性伸缩,基于prometheus自定义指标
  12. matlab进化树的下载,mega7进化树软件下载
  13. Regular Expression简介
  14. 名帖63 欧阳询 楷书《九成宫醴泉铭》
  15. Word 2010 中的 VBA 入门
  16. Precision(精准率、查准率)和Recall(召回率、查全率)的应用场景
  17. 《Android游戏开发详解》一3.6 图形
  18. HTML5仿手机微信聊天界面
  19. Jupyter打开图形界面并画出正弦函数图像
  20. 如何判断芯片的第一个引脚

热门文章

  1. linux 临时文件 清理,Linux临时文件的清理
  2. 蓝桥杯 ALGO-114 算法训练 黑白无常
  3. PAT 1069. 微博转发抽奖(20)-乙级
  4. python snmp 自动化2-在python中使用snmp
  5. 你是否适合当一个Java程序员?一文看清
  6. Eclipse 启动项目错误:class not found
  7. Docker-CE 入门
  8. 阿里云数据森林人才计划起航
  9. hdu1114完全背包
  10. 《97年世界编程大赛一等奖作品》