OnlineJudge-OJ最头疼的输入输出问题

OnlineJudge输入输出问题

通常来说OJ对于每道题里面有.in和.out文件,分别表示测试数据的输入和输出。如果某些编程题的所有数据都只做在一个.in和一个.out中,这样就会变成多组测试了,所以需要提交的代码中循环处理。
其实这个问题可以避免,就是编程题后台每个样例做一组对应的.in和.out文件,这样就变成单组测试,代码就不需要循环处理,但是平时练习的题目质量不一,这个问题都会出现。
下面列出了几种常见的输入输出格式:

几种常见输出如输出类型

case1

【问题描述】
输入描述 :
输入有两行,第一行n
第二行是n个空格隔开的字符串
输出描述 :
输出一行排序后的字符串,空格隔开,无结尾空格
例子:
5
c d a bb e
【示例代码】

void str_case1()
{
	vector<string> str;
	int num;
	cin >> num;
	for (int i = 0; i < num; i++)
	{
		string temp;
		cin >> temp;
		str.push_back(temp);
	}
	sort(str.begin(), str.end());
	for (int i = 0; i < str.size(); i++)
		cout << str[i] << " ";
}

case2

【问题描述】
输入描述:
多个测试用例,每个测试用例一行。

每行通过空格隔开,有n个字符,n<100

输出描述:
对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开
示例1:
输入
a c bb
f dddd
nowcoder
输出:
a bb c
dddd f
nowcoder
【示例代码】

void str_case2()
{
	string s;
	while (getline(cin, s))
	{
		vector<string> str;
		stringstream ss;
		ss << s;
		string temp;
		while (getline(ss, temp, ' '))
		{
			str.push_back(temp);
		}
		sort(str.begin(), str.end());
		for (int i = 0; i < str.size(); i++)
			cout << str[i] << " ";
		cout << endl;

	}
}

case3

【问题描述】
输入描述:
输入数据有多组, 每行表示一组输入数据。

每行不定有n个整数,空格隔开。(1 <= n <= 100)。

输出描述:
每组数据输出求和的结果
示例1
输入
1 2 3
4 5
0 0 0 0 0
输出
6
9
0
【示例代码】

void num_case3()
{
	string str;
	while (getline(cin, str))// 一行一行的读取 
	{ 
		stringstream ss(str);
		int sum = 0;
		int v;
		// 每行不知道有几个整数,通过stringstream来循环读取
		while (ss >> v) {
			sum += v;
		}
		cout << sum << endl;
	}
	/*
	//或者可用stoi
	string str;
	while(getline(cin,str))
	{
		stringstream ss;
		ss<
}

case4

【问题描述】
输入描述:
输入数据有多组, 每行表示一组输入数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果
示例1
输入
4 1 2 3 4
5 1 2 3 4 5
输出
10
15
【示例代码】

void num_case4()
{
	int num;
	while (~scanf("%d", &num))	// while(cin>>num)也行
	{
		int sum = 0;
		for (int i = 0; i < num; i++)
		{
			int a;
			scanf("%d", &a);
			sum += a;
		}
		printf("%d\n", sum);
	}
}

case5

【问题描述】
输入描述:
输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。
接下来t行, 每行一组数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果
示例1
输入
2
4 1 2 3 4
5 1 2 3 4 5
输出
10
15
【示例代码】

void num_case5()
{
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)//或者 while(~scanf("%d", &n))
	{
		int num = 0;
		scanf("%d", &num);
		int sum = 0;
		for (int i = 0; i < num; i++)
		{
			int a = 0;
			scanf("%d", &a);
			sum += a;
		}
		printf("%d\n", sum);
	}
}

你可能感兴趣的:(数据结构与算法)