题目1:调整方阵
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:789
解决:359
-
题目描述:
-
输入一个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
-
-
-
水题一道,但是还AC了很久 ,本来以为在 外面定义一个 swap函数就可以实现交换 没想到一点都没有用 害得我wa了很久
-
源代码:
-
#include<iostream> #include<cstdio> using namespace std; #define N 11 int main() { //题目大意:输入一个N介方阵 //在第一列所在的最大的数所在的行与第一行对调 //将第二列中最大的数到第N行最大数所在的行与第二行对调 依次类推。。。 int n, j, i, k; int a[N][N]; while(cin>>n) { for(i = 0; i < n; i++) {//输入 for(j = 0 ; j < n; j++) { cin>>a[i][j]; } } int pos ; for(i = 0 ; i < n; i++) {//从第0 列开始 int max = -1001; for(j = i ; j < n ; j++) { //j 表示行 找到最大列位置的行位置 if(a[j][i] > max) { max = a[j][i]; pos = j;//pos 记录所在的行 } } //找到所在的行 然后接下来交换 int tmp; for(k = 0 ; k < n; k++) { tmp = a[pos][k]; a[pos][k] = a[i][k]; a[i][k] = tmp; } } for(i = 0 ; i < n; i++) { for(j = 0 ; j < n-1; j++) { printf("%d ", a[i][j]); } cout<<a[i][j]<<endl; } } return 0; }