題目
給出任意一個(gè)N*N的矩陣,將里面的數(shù)字按照從左上到右下有小到大排序陡叠,之后計(jì)算出新矩陣對(duì)角線上的數(shù)字總和(每個(gè)位置只參與一次計(jì)算)嫩挤。
解題思路
流程:
輸入代表矩陣的數(shù)組大小n
遍歷輸入矩陣值
遍歷n*n-1次夸政,將較大值往后放(可改進(jìn)一點(diǎn))
遍歷輸出
根據(jù)規(guī)律將數(shù)據(jù)行列值相等或者行列只相加等于n-1的值累加
源碼
#include <stdio.h>
int main()
{
int n;
printf("輸入n*n矩陣大小N:\n");
scanf("%d", &n);
printf("輸入矩陣數(shù)值:\n");
int num[n][n];
int i, j, k, buff;
int sum = 0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
scanf("%d", &num[i][j]);
for(k = 1; k < (n*n-1); k++)
{
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
{
if(j < n-1)
{
if(num[i][j] > num[i][j+1])
{
buff = num[i][j+1];
num[i][j+1] = num[i][j];
num[i][j] = buff;
}
}
if((j == (n-1)) && (i != (n-1)))
{
if(num[i][j] > num[i+1][0])
{
buff = num[i+1][0];
num[i+1][0] = num[i][j];
num[i][j] = buff;
}
}
}
}
printf("排序后的矩陣為:\n");
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
j == (n-1) ? printf("%4d\n", num[i][j]):printf("%4d ", num[i][j]);
printf("矩陣角線和為:\n");
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if((i == j) || ( (i+j) == (n-1)))
sum = sum + num[i][j];
printf("%d", sum);
return 0;
}
執(zhí)行結(jié)果
總結(jié)
好久沒(méi)有敲代碼了闰围,都是在看視頻或者復(fù)制別人的代碼赃绊。自己寫(xiě)的時(shí)候各種問(wèn)題,語(yǔ)法問(wèn)題還好羡榴,編譯器會(huì)報(bào)錯(cuò)信认,不報(bào)錯(cuò)直接不能運(yùn)行才是最可怕的蜻直。上面代碼用的dev c++ 另玖,vs出錯(cuò)說(shuō)定義的數(shù)組必須為常量袱贮,明天在補(bǔ)坑。(剛搜索了一下c++明確規(guī)定:數(shù)組的初始化必須是常量迄沫、或者常量表達(dá)式稻扬。但是MinGW編譯器卻擴(kuò)展了數(shù)組中的初始化方式。而dev c++使用的就是MinGW,還是用define吧)邢滑。原來(lái)想用函數(shù)腐螟,用指針傳值,嘗試失敗困后,直接簡(jiǎn)單暴力的方式實(shí)現(xiàn)功能乐纸。(明天或者后天補(bǔ)坑,哈哈)