任意给定一个n*n的矩阵,矩阵的行数与列数均为n。你的任务是通过行变换,使得矩阵每行元素的平均值按递增顺序排列。如果出现有的行平均值相同的情况,则按照原顺序输出。
输入格式:
共n+1行,第一行为一个整数n代表矩阵的行数(列数),n的范围是1—100。后边n行为n*n个整数,即此矩阵的元素。矩阵元素的绝对值不会超过1000000。
输出格式:
共n行,为经过行变换后的新矩阵。每行的每个元素用空格分隔,注意最后一个元素后为换行符。具体见样例。
输入样例:
3
5 5 5
3 3 3
1 1 1
输出样例:
1 1 1
3 3 3
5 5 5
代码如下:
#include<stdio.h>
void swap(int a[100][100], int j, int n)
{
//冒泡排序
int i = 0;
for (i = 0; i <= n; i++)
{
int k = a[j][i];
a[j][i] = a[j + 1][i];
a[j + 1][i] = k;
}
}
int main()
{
int n,i, j, k;
int a[100][100] = { 0 };
scanf("%d", &n);
//输入,求和
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
a[i][n] += a[i][j];
}
}
//排序
for (i = 0; i < n; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (a[j][n] > a[j + 1][n])
{
//交换两行
swap(a, j, n);
}
}
}
//输出
for (i = 0; i < n; i++)
{
printf("%d", a[i][0]);
for (j = 1; j < n; j++)
printf(" %d", a[i][j]);
printf("\n");
}
return 0;
}
其实就是把二维数组进行排序
我用了冒泡排序,大家还可以试试其他的排序方法