ACM题目中输入数据的处理(C++版)
ACM题目中输入数据的处理(C语言版)见:http://blog.csdn.net/sxhelijian/article/details/8978794
ACM竞赛题目的输入数据常要求有多组,并且格式多种多样,这是初次登OJ平台的同学的一个障碍。实际上,这些格式可以归为固定的几种类型,本文介绍各种类型的处理方法,以帮助同学们克服这些障碍。
实际上,这些模式不仅是OJ平台上做题的需要。在平时的自由编程练习中,也可以自行使用这些模式,以提高调试程序的效率。对程序测试的意识也将在此过程中得到提升。
本文1-4部分介绍了几种类型输入的处理,第5部分介绍通过输入重定向提高调试程序效率的方法。
1. 最简单的输入
例1:
Description
计算 a+bInput
两个整数 a,bOutput
a+b的值Sample Input
1 2Sample 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 + bInput
多组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行 Output
每组的两个整数(a和b)求和并输出,每组的求和结果独占一行Sample Input
1 5
10 20
400 516Sample Output
6
30
916
这种输入包含多对输入数据,需要构造一个循环读取。因为没有指出到底有多少对输入,要有办法判断输入何时结束。解决办法是:
#include <iostream>
using namespace std;
int main()
{int a,b;while(cin >> a >> b){cout << a+b << endl;}return 0;
}
说明1:当读到输入结束时,cin >> a >> b返回 0,循环也结束。
说明2:在调试程序时,键盘输入的数据,用CTRL-Z(即按住CTRL键不放,再按下Z)组合作为输入结束,此谓键盘输入设备的“文件末尾”。
3. 一次运行,要输入多组数据,组数由第一个输入数据决定(在开始的时候输入一个N,接下来是N组数据)
例3:
Description
计算 a + bInput
第一行是数据的组数N,从第二行是N组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行 Output
每组的两个整数(a和b)求和并输出,每组的求和结果独占一行Sample Input
2
1 5
10 20Sample 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 + bInput
多组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行。当输入为 0 0 时,输入结束。Output
每组的两个整数(a和b)求和并输出,每组的求和结果独占一行。Sample Input
1 5
10 20
0 0Sample 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.txtint 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.txtint a,b;cin>>a>>b;cout<<a+b<<endl;return 0;
}
还有用条件编译处理的方法,暂不讲了。
ACM题目中输入数据的处理(C语言版)见:http://blog.csdn.net/sxhelijian/article/details/8978794
==================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章分类目录(不定期更新) ==|
|== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==|
======== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =======
ACM题目中输入数据的处理(C++版)相关推荐
- ACM题目中输入数据的处理(C++语言版)
ACM题目中输入数据的处理(C语言版)见: http://blog.csdn.net/sxhelijian/article/details/8978794 ACM竞赛题目的输入数据常要求有多组,并且格 ...
- 网络流题目详讲+题单(提高版)(持续更新中......)
网络流题目详讲+题单(提高版)(持续更新中......) 标签:图论--网络流 PS:如果你觉得自己还不够强(和我一样弱),可以去入门版看看 阅读体验:https://zybuluo.com/Junl ...
- 操作系统基础知识点(从题目中总结)期末复习总结 终极版 ctrl+f 寻找你想要的答案
1.( )不是操作系统关心的主要问题 A. 管理计算机裸机 B. 设计.提供用户程序与计算机硬件系统的界面 C. 管理计算机系统资源 D. 高级程序设计语言的编译器 2.财务软件是一种( ). ...
- ACM题目和培养训练!!!
ACM大量习题题库 ACM大量习题题库 现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库. USACO ht ...
- Maltab在数学建模中的应用(第二版)——读书笔记上
Maltab在数学建模中的应用(第二版)--读书笔记上 1.MATLAB与数据文件的交互 1.1数据拟合 1.2数据拟合实例 1.3数据可视化 1.4层次分析法 2.规划问题的MATLAB求解(多约束 ...
- 大一新生能从ACM比赛中得到什么?
写在前面: 大家都曾以新生的身份经历了大学的迷茫期--我们看见别人的成功,却无法窥见成功的道路.我们每天忙忙碌碌,疲于奔波,想要走自己的路,却又不自觉的模仿着他人.每年参加acm实践班的人如过江之鲫, ...
- 【题目】pyCharm 专业版 和 社区版的区别以及如何查看其版本
[时间]2018.09.22 [题目]pyCharm 专业版 和 社区版的区别以及如何查看其版本 [参考链接]https://zhidao.baidu.com/question/58433188511 ...
- PUK ACM题目分类
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- 12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用
0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比 ...
最新文章
- jfinal js 拦截_jfinal 使用拦截器处理繁琐的前置条件判定
- idea 设置项目跑在tomcat上
- visual MySQL 教程_Visual Studio操作MySQL的详细步骤
- mysql索引结构原理、性能分析与优化
- 面向对象三大特性: 封装
- 数列分块入门 1(LibreOj-6277)
- ps css html,用ps两分钟做个xhtml+css的网站首页
- 小程序复制内容至剪贴板
- 简单python脚本实例-你用 Python 写过哪些有趣的脚本?
- AltTab 把 Windows 的 Alt+Tab 功能带到 macOS
- php arraymap 匿名函数,结合代码详细为你讲解,php中的array_map,array_walk以及匿名函数...
- 进制转化(北理乐学编程题目)
- python秒网课_利用python完成大学刷课(从0到完成的思路)
- 遗传算法matlab工具箱及其应用
- 冲击IPO:达达的负“重”上市之路
- 测试用例方法----正交试验(实验)设计法(黑盒)
- Python包导入时重命名
- LTE: 小区特定参考信号功率与RRU发射功率的计算
- 【首发】 ubuntu20.04安装matlab2021b/matlab2020b
- 13、【算法】算法复杂度分析