ACM题目中输入数据的处理(C++语言版)
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++语言版)相关推荐
- ACM题目中输入数据的处理(C++版)
ACM题目中输入数据的处理(C语言版)见:http://blog.csdn.net/sxhelijian/article/details/8978794 ACM竞赛题目的输入数据常要求有多组,并且格式 ...
- bnu1079 BNUEP的球迷 C语言版
北京师范大学珠海分校 Judge Online of ACM ICPC 1079 BNUEP的球迷 C语言版 #include <stdio.h> #include <string. ...
- bnu1295 BNUEP的风云人物 C语言版
北京师范大学珠海分校 Judge Online of ACM ICPC 1295 BNUEP的风云人物 C语言版 #include <stdio.h> int main(){ int i, ...
- bnu1258 神奇礼物盒 C语言版
北京师范大学珠海分校 Judge Online of ACM ICPC 1258 神奇礼物盒 C语言版 #include <stdio.h> #include <string.h&g ...
- ACM题目和培养训练!!!
ACM大量习题题库 ACM大量习题题库 现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库. USACO ht ...
- 大一新生能从ACM比赛中得到什么?
写在前面: 大家都曾以新生的身份经历了大学的迷茫期--我们看见别人的成功,却无法窥见成功的道路.我们每天忙忙碌碌,疲于奔波,想要走自己的路,却又不自觉的模仿着他人.每年参加acm实践班的人如过江之鲫, ...
- PUK ACM题目分类
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- PTA 基础编程题目集 7-33 有理数加法 C语言
PTA 基础编程题目集 7-33 有理数加法 C语言 本题要求编写程序,计算两个有理数的和. 输入格式: 输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范 ...
- PTA 基础编程题目集 7-24 约分最简分式 C语言
PTA 基础编程题目集 7-24 约分最简分式 C语言 分数可以表示为分子/分母的形式.编写一个程序,要求用户输入一个分数,然后将其约分为最简分式.最简分式是指分子和分母不具有可以约分的成分了.如6/ ...
最新文章
- class没有发布到tomcat_SpringBoot内置tomcat启动原理
- Mysql取得分组的前n名
- 关于标准库中的ptr_fun/binary_function/bind1st/bind2nd
- lambda中使用filter过滤
- NanoLog软件架构
- 如何使用PowerShell创建简单SQL Server数据库登录对话框
- 泰克示波器截屏软件-Tektronix示波器上位机-OpenChoice安装。示波器波形发文章论文
- Python 常用命令
- 嵌入式工具——strace
- mysql数据库java驱动下载(jdbc)
- k8s mysql 弹性_k8s 弹性伸缩,基于prometheus自定义指标
- matlab进化树的下载,mega7进化树软件下载
- Regular Expression简介
- 名帖63 欧阳询 楷书《九成宫醴泉铭》
- Word 2010 中的 VBA 入门
- Precision(精准率、查准率)和Recall(召回率、查全率)的应用场景
- 《Android游戏开发详解》一3.6 图形
- HTML5仿手机微信聊天界面
- Jupyter打开图形界面并画出正弦函数图像
- 如何判断芯片的第一个引脚