0%

C/C++常见输入输出的小总结

说明

怎么说呢,首先说说地址,还是牛客网。总地来说吧,最近也是做了不少的题目,对于输入和输出数据的类型东西也是有了一些了解。我最开始利用输入字符串的形式,加上 vector 解析的例子也是一个不错的想法,但是最近仔细的做了一系列的输入输出题目以后,发现有了新的思路。

例题分析

废话不多说,直接上题,题型全是计算A+B的类型,具体如下:

1. 题目描述
计算a+b

输入描述:
输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据包括多组。示例如下:

1
2
1 5
10 20

输出描述:
输出a+b的结果。示例如下:

1
2
6
30

一个简单的EOF,判断是否结束,比较简单直接贴答案:

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;

int main()
{
int a, b;
while(scanf("%d %d", &a, &b) != EOF)
cout << a + b << endl;
return 0;
}

2. 题目描述
计算a+b

输入描述:
输入第一行包括一个数据组数t(1 <= t <= 100)
接下来每行包括两个正整数a,b(1 <= a, b <= 10^9)
示例示例:

1
2
3
2
1 5
10 20

输出描述:
输出a+b的结果。示例如下:

1
2
6
30

这个应该是最简单的一类了,直接上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;

int main()
{
int n, a, b;
cin >> n;
if(n <= 0) return 0;

for(int i = 0; i < n ; i++)
{
cin >> a >> b;
cout << a+b << endl;
}
return 0;
}

3. 题目描述
计算a+b

输入描述:
输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组, 如果输入为0 0则结束输入
示例示例:

1
2
3
1 5
10 20
0 0

输出描述:
输出a+b的结果。示例如下:

1
2
6
30

这个直接判断输入的数据,直接上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;

int main()
{
int a, b;

while(1)
{
cin >> a >> b;
if((a == 0) && (b == 0))
break;
cout << a+b << endl;
}
return 0;
}

4. 题目描述
计算一系列数的和

输入描述:
输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。
示例示例:

1
2
3
4 1 2 3 4
5 1 2 3 4 5
0

输出描述:
输出a+b的结果。示例如下:

1
2
10
15

这个直接判断输入第一个数即可,跟上面几乎没有区别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;

int main()
{
int n, a, b;

while(1)
{
int tmp = 0, sum = 0;
cin >> n;
if(n <= 0)
break;

for(int i = 0; i < n; i++)
{
cin >> tmp;
sum += tmp;
}

cout << sum << endl;
}

return 0;
}

5. 题目描述
计算一系列数的和

输入描述:
输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。
接下来t行, 每行一组数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
示例示例:

1
2
3
2
4 1 2 3 4
5 1 2 3 4 5

输出描述:
输出a+b的结果。示例如下:

1
2
10
15

贴答案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;

int main()
{
int t, n, a, b;
cin >> t;
if(t <= 0) return 0;

for(int i = 0; i < t; i++)
{
int tmp = 0, sum = 0;
cin >> n;
if(n <= 0) break;

for(int j = 0; j < n; j++)
{
cin >> tmp;
sum += tmp;
}

cout << sum << endl;
}

return 0;
}

6. 题目描述
计算一系列数的和

输入描述:
输入数据有多组, 每行表示一组输入数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
示例示例:

1
2
4 1 2 3 4
5 1 2 3 4 5

输出描述:
输出a+b的结果。示例如下:

1
2
10
15

同上,添加一个EOF,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;

int main()
{
int n = 0;
while(scanf("%d", &n) != EOF)
{
int sum = 0, tmp = 0;
for(int i = 0; i < n; i++)
{
cin >> tmp;
sum += tmp;
}
cout << sum << endl;

}

return 0;
}

6. 题目描述
计算一系列数的和

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

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

1
2
3
1 2 3
4 5
0 0 0 0 0

输出描述:
输出a+b的结果。示例如下:

1
2
3
6
9
0

这个就是我最先开始说的输入问题,我最先使用的输入字符串然后去解析的方式实在很笨,看了一些帖子以后发现scanf的标准输入输出非常好用,在输入的信息的时候scanf会默认用空格或者换行来区分数据,因此直接强行判断即可,题目默认也是一个数字一个字符,碰到换行符’\n’就输出并且清空就行,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;

int main()
{
int n, sum = 0;
char c;
while(scanf("%d%c", &n, &c) != EOF)
{
sum += n;
if(c == '\n')
cout << sum << endl, sum = 0;
}

return 0;
}

总结

关于笔试的刷题,我觉得牛客的这个帖子是必做的,题目虽然不难,但是真的是受益匪浅!!!!

-------------本文结束感谢您的阅读-------------