算法-程序设计课week1---1-IO

本着 “代码即注释,注释即文档” 的写作思路,本文将尽量把代码和注释都写得简洁易懂。

这是《程序设计思维与实践》课程第一周试验的IO部分。这部分包含了算法题目中输入输出的大部分情况,掌握这些也就基本掌握了输入输出的思路。另外关于stdio与iostream效率与简便性之争,我之前也在纠结,但一番实验做下来,我觉得stdio就是神器,还要啥自行车啊:-)。

A - IO1

计算a+b

Input

输入第一行是一个整数N,代表接下来N行会有N组样例输入。

Output

每组输出占一行。

Sample Input

2
1 5
10 20

Sample Output

6
30
#include<cstdio>

int main() {
	//freopen ( "input.txt", "r", stdin );
	int n;
	scanf("%d",&n);

	for(int i=0; i<n; i++) {
		int a,b;
		scanf("%d %d",&a,&b);
		printf("%d\n",a+b);
	}
	return 0;
}

B - IO2

计算a+b

Input

有多组样例输入,以0 0代表输入结束。

Output

每组输出占一行

Sample Input

1 5
10 20
0 0

Sample Output

6
30

#include<cstdio>

int main() {
	//freopen("input.txt","r",stdin);
	int a,b;
	
	//获取到输入结束,同时判断输入的ab是不是同为0
	//这里的简洁写法很值得学习
	while(~scanf("%d %d",&a,&b)&&(a||b)) {
		printf("%d\n",a+b);
	}
	return 0;
}

C - IO3

计算a+b

Input

有多组样例输入

Output

每组输出占一行

Sample Input

1 5
10 20

Sample Output

6
30

#include<cstdio>

int main() {
	int a,b;

	//小白可能傻眼,因为这道题的输入没有明显的结束标志
	//但其实这里只是需要一个小trick
	//scanf在遇到输入结束(EOF)时会返回-1
	//cin遇到结束返回0
	//EOF代表文件结束End Of File(其实就是二进制全为0的 char )
	//文本文档末尾自动包含EOF,控制台使用ctrl+z可输入EOF
	//我管这个叫“无穷行”技巧
	//相应的还有一行中有不定个输入的“无穷列”技巧
	while(~scanf("%d %d",&a,&b)){
		printf("%d\n",a+b);
	}
	return 0;
}

D - IO4

你的任务是计算一些整数的和

Input

输入包含多组样例。
每组样例包含一个整数N,然后在同行有N个整数。
若N = 0,则表示输入结束,这个样例不需要被处理。

Output

对于每组用例,你应当输出这组样例N个数字的和,每个输出占一行。

Sample Input

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

Sample Output

10
15

#include<cstdio>
int main() {
	int N;//尽量使用题目中的符号命名变量,这样不至于混淆命名
	int n;
	int sum;
	//外循环用于获取行首以及判断结束
	while(scanf("%d",&N) && N) {
		sum = 0;
		//内循环用于获取每一行剩下的数字
		while (N--) {
			scanf("%d",&n);
			sum += n;
		}
		printf("%d\n",sum);
	}
}

E - IO5

请计算下面每行数的和。

Input

第一行有一个整数N,表示有N行数。接下来N行,每行第一个为整数M,表示本行后面有M个整数。

Output

对于输入的每一行数,请分别对应输出每一行数的和。

Sample Input

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

Sample Output

10
15

Hint

本题相关知识:输入输出和循环语句(for)的使用方式。

//本题无特殊技巧
#include<cstdio>

int main() {
	int m;
	int N;
	int n;
	int sum;
	scanf("%d",&m);
	for(int i=0; i<m; i++) {
		scanf("%d",&N);
		sum = 0;
		while (N--) {
			scanf("%d",&n);
			sum += n;
		}
		printf("%d\n",sum);
	}
	return 0;

}

F - IO6

请计算下面每行数的和。

Input

输入包含多组数据,每组数据占一行。每行第一个数为整数N,后面有N个整数

Output

对于输入的每一行数,请分别对应输出每一行数的和。

Sample Input

4 1 2 3 4
5 1 2 3 4 5

Sample Output

10
15

Hint

本题相关知识:输入输出和循环语句(while)的使用方式。

#include<cstdio>

int main() {
	int N;
	int n;
	int sum;
	//以一样的无穷行技巧
	while(~scanf("%d",&N)) {
		sum = 0;
		while (N--) {
			scanf("%d",&n);
			sum += n;
		}
		printf("%d\n",sum);
	}
}

G - IO7 PE

你的任务是求许多数的和。

Input

第一行需要输入一个整数N,接下来会有N行。 每一行开始输入一个整数M,然后会有M个数在同一行。

Output

对于每组输入,要求在一行输出它们的和。并且你要保证每组输出之间有一空行。

Sample Input

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

Sample Output

10

15

6
//这道题的输出有个神坑,最后必须有个回车
#include<cstdio>
int main() {
	int m;
	int N;
	int n;
	int sum;
	scanf("%d",&m);
	for(int i=0; i<m; i++) {
		scanf("%d",&N);
		sum = 0;
		while (N--) {
			scanf("%d",&n);
			sum += n;
		}
		if(i==0)printf("%d\n",sum);
		else printf("\n%d\n",sum);
		
	}
	return 0;

}

H - 长长记性

你的任务还是计算a + b.

Input

题目包含多组数据,每组数据一行. 每行两个整数 a 和 b ( 1 <= a, b ) , 用一个空格分开,某行 a = 0, b = 0, 意味着数据EOF.

Output

输出结果

Sample Input

1 5
10 20
100 10
0 0

Sample Output

6
30
110
#include<cstdio>

int main() {
	//freopen("input.txt","r",stdin);
	int a,b;
	//输入加判断0
	while(~scanf("%d %d",&a,&b)&&(a||b)) {
		printf("%d\n",a+b);
	}
	return 0;
}
发布了166 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/lgfx21/article/details/104452624