重复地读入一个N(<=10)阶方阵A(A所有元素为正整数),对A做如下操作:
a)将A第一列中最大数所在的行与第一行对调;
b)将A第二列中从第二行到第N行中最大数所在的行与第二行对调;
c)... ... ... ... ... ... ...
d)将A第N - 1列中从第N - 1行到第N行中最大数所在的行与第N - 1行对调。
e)输处调整后的矩阵
输入:每组数据的第一行为一正整数n(<= 10),后跟n行数据,每行n个正整数(用空格隔开)。若n = 0,则表示输出结束,程序终止。
输出:将每组数据所表示的矩阵调整后输出。
#include<cstdio>
const int maxn = 10;
int matrix[maxn][maxn] = {0};
int ans[maxn] = {0};
int n;
void init(int n)
{
for(int i = 0; i < n; i++)
{
ans[i] = i;
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
scanf("%d", &matrix[i][j]);
}
}
}
void exchange(int i, int j)//实现矩阵i行和j行互换
{
for(int k = 0; k < n; k++)
{
int temp = matrix[i][k];
matrix[i][k] = matrix[j][k];
matrix[j][k] = temp;
}
}
int main(void)
{
scanf("%d", &n);
init(n);
for(int i = 0; i < n - 1; i++)//列数
{
int max_val = 0;
int max_num = 0;
for(int j = i; j < n; j++)//行数
{
if(matrix[j][i] > max_val)
{
max_val = matrix[j][i];
max_num = j;
}
}
exchange(i, max_num);
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
printf("%d", matrix[ans[i]][j]);
}
printf("\n");
}
return 0;
}