題目
給出任意一個(gè)N*N的矩陣嘀韧,將里面的數(shù)字按照從左上到右下有小到大排序佑稠,之后計(jì)算出新矩陣對(duì)角線上的數(shù)字總和(每個(gè)位置只參與一次計(jì)算)骚勘。例如:
給出左邊這個(gè)矩陣刀森,先把它轉(zhuǎn)換成右邊的矩陣,之后計(jì)算對(duì)角線上的數(shù)字之和:1 + 5 + 9 + 3 + 7 = 25
解題思路
1.利用二維數(shù)組獲取一個(gè)矩陣伴奥;
2.對(duì)矩陣排序写烤;
3.計(jì)算排序后的矩陣對(duì)角線之和;
源碼
#include<stdio.h>
void getMatrix(int n, int arry[][10]);
void printMatrix(int n, int arry[][10]);
void sortMatrix(int n, int arry[][10]);
int countMatrix(int n, int arry[][10]);
void getMatrix(int n, int arry[][10])
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &arry[i][j]);
}
}
}
void printMatrix(int n, int arry[][10])
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%-3d", arry[i][j]);
}
printf("\n");
}
}
void sortMatrix(int n, int arry[][10])//遍歷二維矩陣拾徙,把大的數(shù)放到最后洲炊;
{
int i, j, k;
int temp;
for(k = 0; k < n*n-1; k++)//最少遍歷次數(shù)為矩陣數(shù)字?jǐn)?shù)減一
{
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (j < n - 1)//如果要比較的數(shù)字不在行末
{
if (arry[i][j] > arry[i][j + 1])//比較前后兩數(shù)字,如果前數(shù)大就把兩數(shù)字交換
{
temp = arry[i][j];
arry[i][j] = arry[i][j + 1];
arry[i][j + 1] = temp;
}
}
else if (j == n - 1 && i != n - 1)//如果要比較的數(shù)字在行末且不在最后一行
{
if (arry[i][j] > arry[i+1][0])
{
temp = arry[i][j];
arry[i][j] = arry[i + 1][0];
arry[i + 1][0] = temp;
}
}
}
}
}
}
int countMatrix(int n, int arry[][10])
{
int i,result=0;
for (i = 0; i < n; i++)
{
result = arry[i][i] + arry[i][n - i - 1] + result;
}
if (n % 2 == 1)
{
result -= arry[i / 2][i / 2]; //如果矩陣階數(shù)為奇數(shù)的話尼啡,此算法會(huì)把矩陣中心數(shù)據(jù)計(jì)算兩次暂衡,需減去一次
}
return (result);
}
void main()
{
int arry[10][10];
int n;
int sum;
printf("請(qǐng)輸入矩陣的階數(shù):\n");
scanf("%d", &n);//獲得矩陣階數(shù)
printf("請(qǐng)輸入矩陣:\n");
getMatrix(n, arry);//獲得矩陣數(shù)據(jù)
printf("排序前的矩陣為:\n");
printMatrix(n, arry);//打印矩陣現(xiàn)狀
sortMatrix(n, arry);//排序矩陣
printf("排序后的矩陣為:\n");
printMatrix(n, arry);//再次打印矩陣現(xiàn)狀
sum = countMatrix(n, arry);//計(jì)算對(duì)角線之和
printf("對(duì)角線之和為%d\n",sum);
getchar();
getchar();
}
執(zhí)行結(jié)果
總結(jié)
重新寫(xiě)了一遍;
優(yōu)化了排序算法崖瞭;
優(yōu)化了求和算法狂巢;
取消了全局變量.