调整N阶方阵的列主元

重复地读入一个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;
}

猜你喜欢

转载自blog.csdn.net/qq_41667538/article/details/88326601