HZNUOJ

Input-Output Lecture (5) for ACM Freshman

Tags:
Time Limit:  1 s      Memory Limit:   32 MB
Submission:3781     AC:2391     Score:32.65

Description

给出一个大小为N*M的矩阵,找出这个矩阵中的最大元素。

Input

输入包含多组测试数据。

每组测试数据的第一行是两个正整数N和M (0<=N, M<=100)。

接下来的N行M列式一个矩阵,里面的每一个元素都是小于100的正整数。

当N和M为0时,输入结束。

Output

对于每组测试数据,输出两行,第一行为"Case i:"(不包括双引号,其中i为第i组测试数据),第二行为一个正整数,即矩阵中的最大元素。每组测试数据之间用一个空行隔开。

Samples

input
3 3 1 2 3 4 5 6 7 8 9 2 3 6 1 1 3 6 4 0 0
output
Case 1: 9 Case 2: 6

Hint

在输入输出格式上,此题相较于之前的题目又有些不同,输入以0 0结束可以用Lecture (2) 的方法,而在输出上由于不知道测试数据的具体数量,无法像Lecture (4) 中一样通过判断结尾来判断是否要输出一个空行。结尾处不确定,但是开头处是确定的,因此我们可以通过是否为第一组输入来确定是否要在前面加一个空行。
因此我们可以写出如下代码:
C语言版:
#include<stdio.h>
int main() {
	int i, j, n, m, a, maxv, t = 1;
	while (scanf("%d %d", &n, &m), n || m) {
		maxv = -1;
		for (i = 0; i<n; i++) {
			for (j = 0; j<m; j++) {
				scanf("%d", &a);
				if (a > maxv) maxv = a;
			}
		}
		if (t != 1) printf("\n");
		printf("Case %d:\n", t++);
		printf("%d\n", maxv);
	}
	return 0;
}

C++版:
#include<iostream>
using namespace std;
int main() {
	int n, m, a, maxv, t = 1;
	while (cin >> n >> m, n || m) {
		maxv = -1;
		for (int i = 0; i<n; i++) {
			for (int j = 0; j<m; j++) {
				cin >> a;
				maxv = max(maxv, a);
			}
		}
		if (t != 1) cout << endl;
		cout << "Case " << t++ << ":" << endl;
		cout << maxv << endl;
	}
	return 0;
}

Author

CHEN, Yupeng