标题: 矩阵 类别: 数组 时间限制 2S 内存限制 10000Kb 问题描述 请写一个程序,对于一个m行m列(2<m<20)的方阵,求其每一行、每一列及主、辅对角线元素之和,然后按照从大到小的顺序依次输出这些值。 注:主对角线是方阵从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线。 输入说明 输入数据的第一行为一个正整数m; 接下来为m行、每行m个整数表示方阵的元素。 输出说明 从大到小排列的一行整数,每个整数后跟一个空格,最后换行。 输入样例 4 15 8 -2 6 31 24 18 71 -3 -9 27 13 17 21 38 69 输出样例 159 145 144 135 81 60 44 32 28 27 代码如下 用dev c++ 写的
# include <stdio.h>
int main(void)
{
int i;
scanf("%d", &i);
int a[i][i] = {0};
int b[2*i+2] = {0};
//输入矩阵
for (int m=0; m<i; ++m)
{
for (int n=0; n<i; ++n)
{
scanf("%d", &a[m][n]);
}
}
//通过b数组来存储题目所要求的值
for (int m=0; m<i; ++m)
{
for (int n=0; n<i; ++n)
{
b[m] += a[m][n];//每行
b[2*i-1-m] += a[n][m];//每列
}
b[2*i] += a[m][m];//主对角线
b[2*i+1] += a[m][i-1-m];//辅对角线
}
//用最喜欢(背得过)的冒泡排序
for (int m=0; m<2*i+2-1; ++m)
{
int temp;
for (int n=0; n<2*i+2-1-m; ++n)
{
if (b[n] < b[n+1])
{
temp = b[n];
b[n] = b[n+1];
b[n+1] = temp;
}
}
}
//输出
for (int m=0; m<2*i+2; ++m)
{
printf("%d ", b[m]);
}
return 0;
}
自己慢慢想出来的,写出来的时候真的特别高兴
算是记录一下自己的学习过程