- 题目描述:
-
输入一个四行五列的矩阵,找出每列最大的两个数。
- 输入:
-
输入第一行包括一个整数n(1<=n<=1000),接下来的四行每行包括五个整数。代表一个四行五列的矩阵,矩阵元素全部是整数。
- 输出:
-
可能有多组测试数据,对于每组数据,按照样例输出的格式将每列最大的两个数输出,如果最大的两个数中的一个数在这一列中有多个相同的值,则行值取行值小的那一个。
输出时要保留原矩阵的行列顺序,即在原矩阵中行值小的,在输出矩阵中的行值依然小。
- 样例输入:
-
1 1 2 4 9 8 -1 4 9 8 8 12 9 8 7 0 7 8 9 7 0
- 样例输出:
-
12 9 9 9 8 7 8 9 8 8
- 提示:
-
每个数字后面都要输出一个空格
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int n, i, row, column, max, sec, locmax, locsec; int matrix[4][5]; int number[2][5]; scanf("%d", &n); while(n) { //接收数组 for(row = 0; row < 4; row ++) { for(column = 0; column < 5; column ++) scanf("%d", *(matrix + row) + column); } //求最大值和次最大值数组 for(column = 0; column < 5; column ++) { if(matrix[0][column] >= matrix[1][column]) { max = matrix[0][column]; sec = matrix[1][column]; locmax = 0; locsec = 1; }else { max = matrix[1][column]; sec = matrix[0][column]; locmax = 1; locsec = 0; } for(row = 2; row < 4; row ++) { if(matrix[row][column] > max) { locsec = locmax; sec = max; max = matrix[row][column]; locmax = row; }else if(matrix[row][column] > sec) { sec = matrix[row][column]; locsec = row; } } if(locmax > locsec) { number[0][column] = sec; number[1][column] = max; }else { number[0][column] = max; number[1][column] = sec; } } //打印输出 for(row = 0; row < 2; row ++) { for(column = 0; column < 5; column ++) printf("%d ", number[row][column]); printf(" "); } n --; } return 0; }