魔方陣,古代又稱「縱橫圖」,是指組成元素為自然數1、2…n的平方的n×n的方陣,其中每個元素值都不相等,且每行、每 列以及主、副對角線上各n個元素之和都相等。以下是**,演算法嵌入到注釋中:
/*
reference from
*/#include/*
輸出陣列
*/int printa(int **magic,int n)
printf("輸出結果:\n");
for(i=1;i<=n;i++)
return 1;}/*
奇階陣求法
奇數階幻方最經典的填法是羅伯法。填寫的方法是:
把1(或最小的數)放在第一行正中; 按以下規律排列剩下的(n×n-1)個數:
1、每乙個數放在前乙個數的右上一格;
2、如果這個數所要放的格已經超出了頂行那麼就把它放在底行,仍然要放在右一列;
3、如果這個數所要放的格已經超出了最右列那麼就把它放在最左列,仍然要放在上一行;
4、如果這個數所要放的格已經超出了頂行且超出了最右列,那麼就把它放在前乙個數的下一
行同一列的格內;
5、如果這個數所要放的格已經有數填入,那麼就把它放在前乙個數的下一行同一列的格內。
*/void odd(int n)
else
//write
int fullfill(int **magic,int n,int next);
fullfill(magic, n ,1);
}//else
printa(magic,n);
}//endof cardinal
/*int fullfill()階梯法填陣列
****/
int fullfill(int **magic,int n,int next)
}//for for end
}//else end
printa(magic,n);
}/*單階偶陣void singleeven()
(1)把方陣分為a,b,c,d四個象限,這樣每乙個象限肯定是奇數階。用羅伯法,依次在a
象限,d象限,b象限,c象限按奇數階幻方的填法填數。
(2)在a象限的中間行、中間格開始,按自左向右的方向,標出k格。a象限的其它行則標出
最左邊的k格。將這些格,和c象限相對位置上的數,互換位置。
(3)在b象限任一行的中間格,自右向左,標出k-1列。(注:6階幻方由於k-1=0,所以不用
再作b、d象限的資料交換),
將b象限標出的這些數,和d象限相對位置上的數進行交換,就形成幻方。
*/void singleeven(int n)
}if(n%4!=0&&n%2==0)
//從每一行的中間格開始向右標記m-1列,並交換b d對應位置
if(i<=m-1)
for(j=1;j<=k;j++)
}/*
printa(a,k);
printa(b,k);
printa(c,k);
printa(d,k);
*///@輸出結果----------------------
printf("輸出結果:\n");
for(i=1;i<=k;i++)
for(i=1;i<=k;i++)
//end output---------------------
}else
printf("wrong method use!!\n");
}//--->>>>>程式入口<<<<<----
int main()
return 0;
}
魔方陣1 奇階魔方陣
魔方陣 古代又稱 縱橫圖 是指組成元素為自然數1 2 n2的平方的n n的方陣,其中每個元素值都不相等,且每行 每列以及主 副對角線上各n個元素之和都相等。魔方陣分為奇階魔方陣和偶階魔方陣,偶階魔方陣又分為能被四整除和不能被四整除兩種,今天來給大家講解奇階魔方陣,後續會為大家補充剩餘的魔方陣。奇階魔...
N階魔方陣
寫出程式填寫出n n 魔方陣 的數值。所謂魔方陣是指這樣的方陣,資料是正整數,從1開始,每個遞增1,每個資料不重複出現,它的每一行 每一列和對角線之和均相等 n是奇數 input 3 5 output 8 1 6 3 5 7 4 9 2 17 24 01 08 15 23 05 07 14 16 0...
n階魔方陣
魔方陣 計算規律 1.將1放在第一行中間一列 2.從2開始到nn按如下規律 每乙個數存放的行數比上乙個數的行數減1 每乙個數存放的列數比上乙個數的列數加1 3.當乙個數的行數為1,他的下乙個數行數為n 4.當乙個數的列數為n,他的下乙個數的列數為1,行數減1 5.若按上述規則確定的位置有數字或上乙個...