-
前面的演算法是這樣的,證明的來源是未知的。
1.首先將 1 放在第一行的中間。
2.從“2”到n*n,每個數字按照以下規則放置:每個數字中的行數從前乙個數字的行數減去1,列數加1
-
1. 累計總和 = 所有數字和行數 = (1+N2)*N2 2n=N(N2+1) 2
2.這被稱為魔方。
3.奇階魔方有一種構造方法:
從 1 開始,沿對角線向右填寫訂單。
特殊情況:如果數字不在魔方中,請填寫行或列另一端的數字。
特殊情況2:如果要填寫的方框被占用,請填寫方框下方的數字方框。
特殊情況3:我忘了。
-
魔方,在古代也被稱為“垂直和水平圖”,指的是組成元素的自然數。n 平方 n n 個平方矩陣,其中每個元素的值不相等,每行、每列、每條大對角線和小對角線中 n 個元素的總和相等。
如 3 3 魔方:
魔方的排列方式如下:
1) 將 1 放在第一行的中間列中;
2)從2到n n,數字按照以下規則儲存;每個數字儲存在一行中,從前乙個數字的行數減去 1,列數加 1(例如在上面的三階魔方中,5 在前一行 4 之後的列中);
5)如果根據上述規則確定的位置中已經有乙個數字,或者如果前乙個數字是第一行的第n列,則將下乙個數字放在前乙個數字的下方。例如,根據上述規定,4 應放在第一行的第二列,但這個位置已經被占用,所以日曆放在 4 的下面 3;
#include
int main()
int a[15][15],i,j,k,p,n;
p=1;while(p==1)
printf("enter n(n=1--15);"
scanf("%d",&n);
if((n!=0)&&n<15)&&n%2!=0))
p=0;for(i=1;in))
i=i+2;
j=j-1;
elseif(i<1) i=n;
if(j>n) j=1;
if(a[i][j]==0)
a[i][j]=k;
elsei=i+2;
j=j-1;
a[i][j]=k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
printf("%5d",a[i][j]);
printf("");
return 0;
-
將 1 放在矩陣第一行的中間,然後將數字按公升序放在矩陣的左上角。 如果這條線被交叉,讓我們假設它周圍有乙個矩陣,並將數字放在那個位置; 如果該位置已被占用,請跳過該位置並將其放在較低的位置,然後以相同的方式將其放回原處。 如圖所示
在 5 5 的魔術矩陣中,在放 1 後,將 2 放在 1 的左上角,但此時它已經越界了。 假設在原來的矩陣上方有乙個矩陣,那麼數字 2 的位置應該在最後一行的第二個位置,然後數字 3 應該放在 2 的左上角,然後依次放下,當它放在 6 時,因為 1 已經佔據了下乙個位置, 所以它被放置在 5 下方的位置。遵循此模式,直到所有數字都完成。
至於遞迴,你可以把它想象成一次執行乙個句子。 當您需要儲存狀態時,系統會自動使用堆疊為您儲存。 讓我們以你說的例子為例: >>>More