计算机考研复试真题 最大的两个数
题目描述
输入一个四行五列的矩阵,找出每列最大的两个数。
输入描述:
接下来的四行每行包括五个整数。代表一个四行五列的矩阵,矩阵元素全部是整数。
输出描述:
可能有多组测试数据,对于每组数据,按照样例输出的格式将每列最大的两个数输出,如果最大的两个数中的一个数在这一列中有多个相同的值,则行值取行值小的那一个。 输出时要保留原矩阵的行列顺序,即在原矩阵中行值小的,在输出矩阵中的行值依然小。
示例1
输入
1 2 4 9 8 -1 4 9 8 8
#include<iostream> using namespace std; int main() { int a[4][5], b[2][5]; for (int i = 0; i < 4; i++) {//输入数据 for (int j = 0; j < 5; j++) cin >> a[i][j]; } for (int j = 0; j < 5; j++) { b[0][j] = a[0][j]; int t=0; for (int i = 0; i < 4; i++) { if (b[0][j] < a[i][j]) { b[0][j] = a[i][j]; t = i;//找到最大的位置,并置为特殊值 } } a[t][j] = -256; } for (int j = 0; j < 5; j++) { b[1][j] = a[0][j]; int t = 0; for (int i = 0; i < 4; i++) { if (b[1][j] < a[i][j]) { b[1][j] = a[i][j]; t = i; } } for(int i=0;i<4;i++) { if(a[i][j]==-256&&i>t)//如果最大数据在次大的数据后面则将b数组对应的列换位置 { i=b[1][j]; b[1][j]=b[0][j]; b[0][j]=i; break; } } } for (int i = 0; i < 2; i++) cout << b[i][0] << " " << b[i][1] << " " << b[i][2] << " " << b[i][3] << " " << b[i][4] << endl; return 0; } /* 解题思路:将元素存入二维数组中,然后对每一列的元素用冒泡排序(稳定算法,能保证输出时要保留原矩阵的行列顺序),然后再按题意输出。 */ /*#include<iostream> using namespace std; void bubbleSort(int arr[][5], int n) { //冒泡排序,将矩阵中每列元素从小到大排列。 for (int i = 0; i<n - 1; ++i) { bool flag = false; //表示本趟冒泡是否发生交换的标志 for (int j = n - 1; j>i; --j) { for (int k = 0; k<5; ++k) if (arr[j - 1][k]>arr[j][k]) { int temp = arr[j - 1][k]; arr[j - 1][k] = arr[j][k]; arr[j][k] = temp; flag = true; } } if (flag == false) return; } } int main() { int a[4][5]; for (int i = 0; i<4; ++i) for (int j = 0; j<5; ++j) cin >> a[i][j]; bubbleSort(a, 4); for (int i = 0; i<4; ++i) cout << a[3][i] << " "; cout << a[3][4] << endl; for (int i = 0; i<4; ++i) cout << a[2][i] << " "; cout << a[2][4] << endl; return 0; }*/
12 9 8 7 0 7 8 9 7 0
输出
12 9 9 9 8 7 8 9 8 8
--------------------------------------------------------------------------------------------------------------------------