矩陣:請寫一個程式,對於一個m行m列(2<m<20)的方陣,求其每一行、每一列及主、輔對角線元素之和,然後按照從大到小的順序依次輸出這些值。
阿新 • • 發佈:2020-12-09
標題: 矩陣 類別: 陣列 時間限制 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
#include <stdio.h> int main() { int m, i, j, tmp; int sum_leading = 0, sum_counter = 0; int a[20][20], line[20] = {0}, column[20] = {0}, s[100]; scanf("%d", &m); for (i = 0; i < m; i++) { for (j = 0; j < m; j++) { scanf("%d", &a[i][j]); } } for (i = 0; i < m; i++) //每行元素求和 { for (j = 0; j < m; j++) { line[i] += a[i][j]; } } for (j = 0; j < m; j++) //每列元素求和 { for (i = 0; i < m; i++) { column[j] += a[i][j]; } } for (i = 0; i < m; i++) //主對角線元素求和 { sum_leading += a[i][i]; } for (i = 0, j = m - 1; i < m ; i++, j--) //輔對角線元素求和 { sum_counter += a[i][j]; } for (i = 0; i < m; i++) //將每行元素和填入陣列s { s[i] = line[i]; } for (j = 0; j < m; j++) //將每列元素和填入陣列s { s[i] = column[j]; i++; } s[2 * m ] = sum_leading; //填入主對角線元素和 s[2 * m + 1 ] = sum_counter; //填入副對角線元素和 for (i = 0; i < 2 * m + 1; i++) { for (j = 0; j < 2 * m + 1 - i; j++) { if (s[j] < s[j + 1]) { tmp = s[j]; s[j] = s[j + 1]; s[j + 1] = tmp; } } } for (i = 0; i < 2 * m + 2; i++) { printf("%d ", s[i]); } return 0; }