二、編程題(需給出源代碼和程序運行截圖)
1. 設計程序實現n*n魔方矩陣(n為奇數)的輸出。
n*n魔方矩陣就是指每一行、每一列以及兩個對角線上的n個自然數的和都相等的方陣。如3*3魔方矩陣為:
8 1 6
3 5 7
4 9 2
矩陣內填寫的數值為1~n*n的自然數。使用已學過的數組相關知識編寫程序實現任意n*n魔方矩陣(n為奇數)的構造並顯示出最終矩陣的結果。
輸入輸出要求:
(1) n的值由用戶指定
(2) 輸出時按照矩陣的形式輸出結果。
輸入輸出示例
Please input an odd positive integer:3
Find 3*3 magic matrix
――――――――
8 1 6
3 5 7
4 9 2
――――――――
#include
#include
#include
#define MAXSIZE 99
using namespace std;
int main()
{
int n = 0, m = 1;
cout<<"\nPlease input an odd positive integer:";
cin>>n;
int zero[MAXSIZE*99] = {0};
vector<int> data(zero, zero + n * n * sizeof(int));
int i = 0, j = ( n - 1 ) / 2;
data[j] = 1;
while( m < n * n )
{
i = i + n - 1;
j = j + n + 1;
if (data[ ( i % n ) * n + ( j % n ) ] == 0 )
{
m++;
data[ ( i % n ) * n + ( j % n ) ] = m;
}else{
i = i + 3;
j = j - 2;
}
}
cout<<endl<<"Find "<<n<<" * "<<n<<" magic matrix"<<endl;
for (i = 0; i < n ; i++)
{
cout<<"_____";
}
cout<<endl<<endl;
for( i = 0; i < n; i++)
{
for ( j = 0; j < n; j++)
{
printf("%4d ",data[ n * i + j]);
}
cout<<endl<<endl;
}
for (i = 0; i < n ; i++)
{
cout<<"_____";
}
cout<<endl<<endl;
}