九度oj 题目1470:调整方阵

题目描述:

输入一个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\n", 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 居然提交编译错误,可能是库函数里有吧

posted @ 2016-09-15 20:38  Jason杰  阅读(349)  评论(0编辑  收藏  举报