xdoj--矩阵--思路简单

  1. 问题描述	
    请写一个程序,对于一个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
    
#include <stdio.h>
int main() {
	int n, a[100][100], sum[100] = {0};
	int z,i,j;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	 for (j = 0; j < n ; j++)     
	scanf("%d", &a[i][j]);            //输入数据 
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n ; j++)  
		{
			sum[i]=sum[i]+a[i][j];    //计算每一行各数之和,主义是a[i][j] 
		}   
	}

    for (i = 0; i < n; i++)
	{
		for (j = 0; j < n ; j++)  
		{                                 //i+n是4,是第五个数 
			sum[i+n]=sum[i+n]+a[j][i];    //计算每一列各数之和,主义是a[j][i] 
		}   
	}                                      //此后i=4再不变 
		
	 for (j = 0; j < n ; j++)              //i变为4,i+n=8,是第九个数  
			sum[i+n]=sum[i+n]+a[j][j];     //计算主对角线之和,主义是a[j][j] 
		   
   	 for (j =0; j<n; j++)                        //i+n+1=9,最后一个数 
       	{                                      //行依次加,列依次减 
			sum[i+n+1]=sum[i+n+1]+a[j][n-j-1];  //计算辅对角线之和,主义是a[j][n-j-1] 
		}   
		
		for (i = 1; i < n*2+2  ; i++)           //排序,把数字之和大的排在最前面 
	 {
		for (j = 0; j < n*2+2 - i; j++) 
		{
			if (sum[j] < sum[j + 1]) 
			{
				z = sum[j],
				sum[j] = sum[j + 1];
				sum[j + 1] = z;
			}
		}
	}       	
		for (i = 0; i < n*2+2  ; i++) 
		printf("%d ",sum[i]);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值