- 题目描述:
-
输入一个N(N<=10)阶方阵,按照如下方式调整方阵:
1.将第一列中最大数所在的行与第一行对调。
2.将第二列中从第二行到第N行最大数所在的行与第二行对调。
依此类推...
N-1.将第N-1列中从第N-1行到第N行最大数所在的行与第N-1行对调。
N.输出这个方阵
- 输入:
-
包含多组测试数据,每组测试数据第一行为一个整数N,表示方阵的阶数.
接下来输入这个N阶方阵.
- 输出:
-
调整后的方阵
- 样例输入:
-
4 3 6 8 7 6 7 5 3 8 6 5 3 9 8 7 2
- 样例输出:
-
9 8 7 2 6 7 5 3 3 6 8 7 8 6 5 3
本来很简单的题,但想尝试一下索引的办法,
代码如下1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 using namespace std; 6 7 int num[12][12]; 8 int myIndex[12]; 9 10 int main() { 11 int n; 12 while (scanf("%d", &n) != EOF && n != 0) { 13 for (int i = 0; i < n; i++) { 14 for (int j = 0; j < n; j++) { 15 scanf("%d", &num[i][j]); 16 } 17 myIndex[i] = i; 18 } 19 for (int j = 0; j < n; j++) { 20 int maxv = num[myIndex[j]][j]; 21 int maxi = j; 22 for (int i = j+1; i < n; i++) { 23 if (num[myIndex[i]][j] > maxv) { 24 maxv = num[myIndex[i]][j]; 25 maxi = i; 26 } 27 } 28 int tmp = myIndex[j]; 29 myIndex[j] = myIndex[maxi]; 30 myIndex[maxi] = tmp; 31 //printf("%d ", maxi); 32 } 33 for (int i = 0; i < n; i++) { 34 printf("%d", num[myIndex[i]][0]); 35 for (int j = 1; j < n; j++) { 36 printf(" %d", num[myIndex[i]][j]); 37 } 38 puts(""); 39 } 40 } 41 return 0; 42 }
第一次提交数组是index 居然提交编译错误,可能是库函数里有吧