从本帖开始本人将自己做acm时候遇到的一些问题,经验和方法总结一下,和互联网的广大朋友共同分享,如果有错误之处,还请指教。做acm遇到的第一个问题就是对输入数据的读取,题目会有多种的要求让我们读入输入的数据,这是实现算法的基础,连数据都读不到还实现什么算法呢。所以本人将题目中常见的几种要求读数据的方式及解决方法总结如下。

#include <iostream>
using namespace std;

int main()
{
	//1、只要求一组输入,这个时候直接使用cin>>a>>b;就可以了
	int a,b;

	//2、要求输入多组数据,之间用空格隔开,每组输入单独占一行,当读到文件尾的时候结束,每组的结果独占一行
	//这个要求没有说明到底是多少组输入,所以我们采用以下的解决方法
	//构造一个循环不断的读到用户的输入数据,当为文件尾的时候或者输入非法字符cin返回的是0,输入结束
	//在dos下模拟这个文件尾使用的是ctrl+z
	while(cin>>a>>b)
	{
		cout<<a+b<<endl;
	}
	return 0;

	//3、要求输入n组数据,这个n是刚开始从控制台中读到的输入,然后分别输入这n组数据
	//解决方法是先读入这个n的值,然后构造一个循环读入这n组数据
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a>>b;
		cout<<a+b<<endl;
	}

	//4、输入不说明有多少组数据,但以某个特殊输入为结束标志。
	//比如“输入学生成绩,以-1结束”,或者输入0,0代表的是输入的结束。解决方法如下,在while循环中进行双判断
	while(cin>>a>>b && !(a== 0 && b==0))
	{
		cout<<a+b<<endl;
	}

	//为了提高效率我们可以使用文件重定向将标准输入重定向到文件,这样不用每次都输入测试数据了,直接从文件
	//中读取就好了,提交的时候注释掉这个重定向就好了
	freopen("1.txt","r",stdin);
	cin>>a>>b;
	cout<<a+b<<endl;
}