OPENJUDGE 1 8 22 神奇的幻方

2021-07-27 03:38:34 字數 1243 閱讀 2193

22:神奇的幻方(從openjudge引入) 檢視

描述

幻方是乙個很神奇的n*n矩陣,它的每行、每列與對角線,加起來的數字和都是相同的。

我們可以通過以下方法構建乙個幻方。(階數為奇數)

1.第乙個數字寫在第一行的中間

2.下乙個數字,都寫在上乙個數字的右上方:

a.如果該數字在第一行,則下乙個數字寫在最後一行,列數為該數字的右一列

b.如果該數字在最後一列,則下乙個數字寫在第一列,行數為該數字的上一行

c.如果該數字在右上角,或者該數字的右上方已有數字,則下乙個數字寫在該數字的下方

輸入

乙個數字n(n<=20)

輸出

按上方法構造的2n-1 * 2n-1的幻方

樣例輸入

3樣例輸出

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

題目分析

幻方的構造題目已經給出,難點在於當右上角有數時的情況。判斷有無數的方法就是將陣列歸零,元素若為「0」則無數,之後將兩種情況分類討論。

程式樣例

#include

int main()

,tot=1; //tot為計數單位

scanf("%d",&n);

n=2*n-1; //構造(2n-1)*(2n-1)的幻方

int i=1,j=(n-1)/2;

while(tot<=n*n) //遍歷每乙個元素

else

//有數

if(i<0)

i=n-1;

if(j>=n)

j=0;

tot++;

}for(int i=0;iif(i) //換行符格式控制

printf("\n");

for(int j=0;jif(j) //空格格式控制

printf(" %d",hf[i][j]);

else

printf("%d",hf[i][j]);

}return

0;}

openjudge 1 8 22 神奇的幻方

總時間限制 1000ms 記憶體限制 65535kb 描述 幻方是乙個很神奇的n n矩陣,它的每行 每列與對角線,加起來的數字和都是相同的。我們可以通過以下方法構建乙個幻方。階數為奇數 1.第乙個數字寫在第一行的中間 2.下乙個數字,都寫在上乙個數字的右上方 a.如果該數字在第一行,則下乙個數字寫在...

openjudge 神奇的幻方

神奇的幻方 檢視 提交 統計 提問 總時間限制 1000ms 記憶體限制 65535kb 描述幻方是乙個很神奇的n n矩陣,它的每行 每列與對角線,加起來的數字和都是相同的。我們可以通過以下方法構建乙個幻方。階數為奇數 1.第乙個數字寫在第一行的中間 2.下乙個數字,都寫在上乙個數字的右上方 a.如...

Openjudge 2755 神奇的口袋

我們來分析一下題目,從k種物品中選出幾個,每種只能選出乙個,看能有多少種填法能將揹包填滿。我先說用遞迴的寫法,首先傳給遞迴函式兩個引數,乙個是口袋的空間,乙個是還有多少個物品可以選擇。從第k個開始選擇,然後填入口袋。但是第k 1個物品不想填該怎麼操作?下面貼出 includeusing namesp...