/* 题目描述: 输入一个四行五列的矩阵,找出每列最大的两个数。 输入: 输入第一行包括一个整数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> int main(void) { int n,matrix[4][5]; while(scanf("%d", &n) != EOF) { getchar(); //吸收回车符。 if(n <= 0) break; int i,j,max,flag = 0; for(i = 0; i < 4; i++) { for(j = 0; j < 5; j++) { scanf("%d", &matrix[i][j]); } } for(i = 0; i < 4; i++) { for(j = 0; j < 5; j++) { printf("%4d ", matrix[i][j]); } printf("\n"); } for(j = 0; j < 5; j++) { max = matrix[0][j]; for(i = 1; i < 4; i++) { if(max < matrix[i][j]) { flag = i; max = matrix[flag][j]; } } max = matrix[flag][j]; matrix[flag][j] = matrix[0][j]; matrix[0][j] = max; flag = 0; } for(j = 0, flag = 1; j < 5; j++) { max = matrix[1][j]; for(i = 2; i < 4; i++) { if(max < matrix[i][j]) { flag = i; max = matrix[flag][j]; } } max = matrix[flag][j]; matrix[flag][j] =matrix[1][j]; matrix[1][j] = max; flag = 1; } for(i = 0; i < 2; i++) { for(j = 0; j < 5; j++) { printf("%4d ", matrix[i][j]); } printf("\n"); } } return 0; }
时间: 2024-10-16 05:21:18