acm奇數魔方陣

2021-07-07 04:15:43 字數 1406 閱讀 7186

(輸入檔案:input.txt 

輸出檔案:

output.txt)

魔方矩陣是乙個n*n

奇數矩陣,其中

n^2個元素分別是

1,2,3,4,5

…,n^2

。魔方矩陣的特點是

:任意一行、任意一列以及主副對角線的所有數之和均相等,且都等於

n(n^2+1)/2

,如下圖所示的三階魔方矩陣 8

1635

7492

小明已經研究出擺放矩陣中數字規則如下:

1、數字1

在矩陣第一行中間一列;

2、從數字2

到n^2

的各個數依次存放在前乙個數的又上角的位置、

4、按上述規則放置,如果已經有數了就放在上乙個數的正下方。

資料輸入:

輸入有多個資料,每個資料n

佔一行(

n<21,並且n

是奇數)。

資料輸出:

對應每個輸入資料,輸出對應的魔方矩陣。

樣例輸入:

樣例輸出:

17 24  1  8 15

23  5  7 14 16

4  6 13 20 22

10 12 19 21  3

11 18 25  2  9

8  1  6

3  5  7

4  9  2

分析:其實解題思路很簡單按照給出的規則對二維陣列進行填寫後輸出就可以了!

#include"stdio.h"

#include"fstream"

#include"iostream"

using namespace std;

//ifstream fin("input.txt");

//ofstream fout("output.txt");

int main()

;

int n;

freopen("input.txt", "r", stdin); //修改輸入指向

freopen("output.txt", "w", stdout); //修改輸出指向

while ((cin >> n)&&n!=eof) //多組資料,判斷輸入是否到了檔案末尾

else //表示該位置已經有數字,於是填寫在上乙個數字的下方

i = i==0 ? n - 1 : i - 1; //定為下一次的位置

j = (j +1) % n; //%n以保證不會超出界限

} for (i = 0; i < n; i++) //列印二維表

cout << endl;

} }// system("pause");

return 0;

}

奇數魔方陣

魔方陣,古代又稱 縱橫圖 是指組成元素為自然數1 2 n的平方的n n的方陣,其中每個元素值都不相等,且每行 每列以及主 副對角線上各n個元素之和都相等。階數大於等於3。如3 3的魔方陣 8 1 6 3 5 7 4 9 2 奇數魔方陣的排列規律如下 1 將1放在第一行中間一列 2 從2開始直到n n...

5奇數魔方陣

說明 將1 到n 為奇數 的數字排列在nxn的方陣上,且各行 各列與各對角線的和必須相同,如下所 示 解法 填魔術方陣的方法以奇數最為簡單,第乙個數字放在第一行第一列的正 然後向右 左 上 填,如果右 左 上已有數字,則向下填,如下圖所示 一般程式語言的陣列索引多由0開始,為了計算方便,我們利用索引...

奇數階魔方陣(洛書)

題目 將1 n的數子排列在n n的方陣上,要求數子不能重複,方陣各行 各列 及兩條對角線的數子之和相等。此位魔方陣,又稱洛書 洛書是九行九列 若n為奇數,則為奇數階魔方陣。解題方法 洛書的排列規律如下 將1放在第一行中間一列 從2開始直到n n止各數依次按下列規則存放 每乙個數存放的行比前乙個數的行...