當前位置:首頁 » 編程軟體 » 編程幻方

編程幻方

發布時間: 2022-09-13 19:23:18

❶ 幻方 問題 n 幻方編程問題

n(n為奇數)階幻方實現方法:

⑴ 將1放在第一行中間一列;
⑵ 從2開始直到n×n止各數依次按下列規則存放按45°方向行走,如向右上每一個數存放的行比前一個數的行數減1,列數加1
⑶ 如果行列范圍超出矩陣范圍,則回繞,例如1在第1行,則2應放在最下一行,列數同樣加1; ⑷ 如果按上面規則確定的位置上已有數,或上一個數是第1行第n列時則把下一個數放在上一個數的下面。

代碼如下:
#include"stdio.h"
#include"math.h"
int a[10][10]; //定義一個二維數組存放數據,大小根據測試的階數確定
void ins(int n)
{
int x,y,m;
x=0;
y=n/2;
for(m=1;m<=n*n;m++) //依次將1~n*n賦值給二維數組
{
a[x][y]=m;// 將1放在第一行中間一列
if(m%n!=0)
{
x--; // 從2開始直到n×n止各數依次按下列規則存放:按45度方向行走
y++;
if(x<0) // 如果行列范圍超出矩陣范圍,則回繞
x=x+n;
if(y==n)
y=n-y;
}
else
{
x++;
if(x==n)
x=x-n;
}
}
}
main()
{
int i,j,n;
scanf("%d",&n);//輸入階數
ins(n); //調用函數
for(i=0;i<n;i++) //列印出幻方
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]); //格式化輸出
puts(""); //列印2個空行
puts("");
}
getch(); //win_TC下的語句用於停住畫面,其他開發環境下無需
}

c語言編程題 標題: 幻方填空 幻方是把一些數字填寫在方陣中,使得行、列、兩條對角線的數

設每行、列、斜線的個數為n,這n個數的和為S。則正中間位置上的數字=S/n幻方各行、各列及兩條對角線所含的n個數的和相等。例子:(三階幻方,幻和為15,)492357816三階幻方中間必填5

❸ 六階幻方怎麼解

下面是六階幻方的其中一個答案:

=================================================

28 4 3 31 35 10

36 18 21 24 11 1

7 23 12 17 22 30

8 13 26 19 16 29

5 20 15 14 25 32

27 33 34 6 2 9

注意:這個幻方的每行每列對角線的六個數之和為111(幻和為111),還有一個特點就是中間的十六個數也構成一個四階幻方哦,幻和為74。希望滿意答案。

=====================================================================

下面介紹一下奇數幻方,雙偶,單偶幻方的常見規律。

一、 N 為奇數時,最簡單。

(1) 將1放在第一行中間一列;

(2) 從2開始直到n×n止各數依次按下列規則存放:

按 45°方向行走,如向右上

每一個數存放的行比前一個數的行數減1,列數加1

(3) 如果行列范圍超出矩陣范圍,則回繞。

例如1在第1行,則2應放在最下一行,列數同樣加1;

(4) 如果按上面規則確定的位置上已有數,或上一個數是第1行第n列時,

則把下一個數放在上一個數的下面。

============================

二、 N為4的倍數時

採用對稱元素交換法。

首先把數1到n×n按從上至下,從左到右順序填入矩陣

然後將方陣的所有4×4子方陣中的兩對角線上位置的數關於方陣中心作對

稱交換,即a(i,j)與a(n-1-i,n-1-j)交換,所有其它位置上的數不變。

(或者將對角線不變,其它位置對稱交換也可)

===========================

三、N 為其它偶數時

當n為非4倍數的偶數(即4n+2形)時:首先把大方陣分解為4個奇數(2m+1階)子方陣。

按上述奇數階幻方給分解的4個子方陣對應賦值

上左子陣最小(i),下右子陣次小(i+v),下左子陣最大(i+3v),上右子陣次大(i+2v)

即4個子方陣對應元素相差v,其中v=n*n/4

四個子矩陣由小到大排列方式為 ① ③

④ ②

然後作相應的元素交換:a(i,j)與a(i+u,j)在同一列做對應交換(j<t或j>n-t+2),

a(t-1,0)與a(t+u-1,0);a(t-1,t-1)與a(t+u-1,t-1)兩對元素交換

其中u=n/2,t=(n+2)/4 上述交換使每行每列與兩對角線上元素之和相等。

=================================================================

下面給出C語言編程實現任意幻方的解答:

========================

#include"stdio.h"

#include"math.h"

int a[256][256];

int sum;

int check();

void ins(int n);

main()

{

int i,j,n,k,t,p,x;

scanf("%d",&n);

sum=(n*n+1)*n/2;

if(n%2==1)//奇數幻方

{

ins(n);

k=n;

}

if(n%4==2)//單偶數幻方

{

k=n/2;

ins(k);

for(i=0;i<k;i++)

for(j=0;j<k;j++)

{

a[j+k]=a[j]+2*k*k;

a[i+k][j]=a[j]+3*k*k;

a[i+k][j+k]=a[j]+k*k;

}

t=(n-2)/4;

for(i=0;i<k;i++)

for(j=0;j<k;j++)

{

if((j<t)&&(i<t))

{

p=a[j];a[j]=a[i+k][j];a[i+k][j]=p;

}

if((j<t)&&(i>k-t-1))

{

p=a[j];a[j]=a[i+k][j];a[i+k][j]=p;

}

if((i>=t&&i<=k-t-1)&&(j>=t&&j<t*2))

{

p=a[j];a[j]=a[i+k][j];a[i+k][j]=p;

}

if(j>1&&j<=t)

{

p=a[j+k];a[j+k]=a[i+k][j+k];a[i+k][j+k]=p;

}

}

}

if(n%4==0)//雙偶數幻方

{

x=1;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

a[j]=x++;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

{

if(i%4==0&&abs(i-j)%4==0)

for(k=0;k<4;k++)

a[i+k][j+k]=n*n-a[i+k][j+k]+1;

else if(i%4==3&&(i+j)%4==3)

for(k=0;k<4;k++)

a[i-k][j+k]=n*n-a[i-k][j+k]+1;

}

}

if(check(n)==1)

{

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

printf("%5d",a[j]);

printf("\n");

}

return ;

}

}

int check(int n)//檢驗是否是幻方

{

int i,j,sum1=0,sum2;

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

sum1+=a[j];

if(sum1!=sum) return 0;

sum1=0;

}

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

sum1+=a[j];

if(sum1!=sum) return 0;

sum1=0;

}

for(sum1=0,sum2=0,i=0,j=0;i<n;i++,j++)

{

sum1+=a[j];

sum2+=a[n-j-1];

}

if(sum1!=sum) return 0;

if(sum2!=sum) return 0;

else return 1;

}

void ins(int n)//單偶數幻方的輸入

{ int x,y,m;

x=0;y=n/2;

for(m=1;m<=n*n;m++)

{

a[x][y]=m;

if (m%n!=0)

{

x--;y++;

if(x<0) x=x+n;

if(y==n) y=n-y;

}

else

{

x++;

if(x==n) x=x-n;

}

}

}

=====================================

說明:以上C語言程序,復制到TXT文本,然後,另存為XXX.c文件,利用編程軟體,編譯這個文件,再保持到電腦,以後想用,直接點擊就會運行。運行後,可以隨意輸入一個幻方階數,就會自動生成一個幻方組合出來。

再說明一點:以上C程序僅供參考,我剛才編譯過,因為是中文輸入法輸入的,所以不通過,需要把上邊的標點符號切換到英文輸入法,再輸入才可以通過編譯。

以下程序是可以通過編譯,只是奇數幻方的C程序,還有,我命令它階數范圍是1~15階的奇數幻方。

==================================

#include "stdio.h"
void main()
{
int a[18][18],i,j,k,p,n;

p=1;
while(p==1)

{
printf("Enter n(n=1 to
15):");

scanf("%d",&n);

if(n!=0 && n<=17 &&
n%2!=0)

p=0;

}

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)

a[i][j]=0;

j=n/2+1;

a[1][j]=1;

for(k=2;k<=n*n;k++)
{
i--;
j++;
if(i<1 && j>n)
{
i+=2;
j--;
}
else
{
if(i<1) i=n;

if(j>n) j=1;
}

if(a[i][j]==0)
a[i][j]=k;
else
{
i+=2;
j--;
a[i][j]=k;
}
}

/*輸出幻方陣*/
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%3d ",a[i][j]);
printf("\n");
}

system("pause");
}

==================================

第一:奇數幻方利用「樓梯法」和「楊輝法」很簡單就能製作出來,可能上面描述的單偶,雙偶幻方不是很詳細,你可以上網查找一下相關資料,都會有圖文解說的,很直觀,規律看起來也很簡單。

第二:關於編程可以解出幻方,可以進行了解,但是可不能一直只利用它哦,得自己琢磨推算幻方,例如利用推理法也可以把所有的幻方推算出來,這樣才能更好地學習(我不用上面的規律也可以把任何一個幻方都推算出來,當然,高次幻方就相對比較難了)。

❹ 3階幻方的口訣表

居上行正中央,

依次斜填切莫忘,

上出框界往下寫,

右出框時左邊放,

重復便在下格填,

出角重復一個樣。
這玩意直接上網查不就有嘛,而且這種難度的東西記口訣反而比較累吧,額…不過好像小學奧數有?依稀記得四年級還是五年級的?
嘛,總之就是這樣(。・ω・。)ノ♡
優質我知道拿不到,也務必不要給我,上網復制了一下什麼力都沒出不配拿(。ӧ◡ӧ。)

❺ 五階幻方(要填入的數字是1-25)

18 24 `5 `6 12
10 11 17 23 `4
22 `3 `9 15 16
14 20 21 `2 `8
1` 7` 13 19 25
9 `3 22 16 15
21 20 14 `8 `2
13 `7 `1 25 19
5 `24 18 12 `6
17 11 10 `4 23
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
下面這些構造方法都是比較適合於編程的.構造幻方分奇數階幻方、4n型偶數幻方、4n+2型的偶數幻方(以下簡稱雙偶數、單偶數).
構造奇數階較簡單,常用的是連續擺數法.下面的n均指階數,在這里(y,x)表示第y橫行的第x個數.
(1)在第一行的正中間(即[1,(n+1)/2])放上1 (2)若數a的位置在(y,x),則a+1的位置在:(y-1,x+1),若有這個位子且裡面沒數 (n,x+1),若y=1且x1 (y+1,x),若x=n且y=1或(y,x)已經有數.(y,x)已經有數的充要條件是a=n(mod n) (3)所構成的(n×n)方即為一個幻方.
我們還可以把連續擺數法推廣,先定義幾個概念:
普通向量:正常走步的情況.(即上面第一種情況)正常走步記作(b,a).中斷向量:即走到(1,n)這個格子或(y,x)已經有數的情況.記作(d,c) 下面是幾個推廣的情況:(1,-1)(0,1);(1,-1)(0,2);(2,1)(1,-2);(2,1)(1,-1);(2,1)(1,0);(2,1)(1,2)
下面是構造雙偶數階幻方:
對稱法:把雙偶數型的幻方分成四個正方形,在左上角正方形中每行每列各取一半打上○(實際上就是使無論從每行還是每列來看都剛好有一半有○,一半無○.)然後向剩下的三個小方塊中映象(鏡像對稱),於是整個方陣都布好了○.(用電腦實行則可以選擇在該布○的地方填上-1).
接下來該填數了.適用於電腦的方法:向所有格子內填數,(推薦x,y分別從1~n的雙重計數循環):若(y,x)沒有○,則填入(y-1)*n+x;若(y,x)中有○,則填入(n-y+1)*n+x+1.適用於筆算的方法:從左上角依次1~n*n填數,遇上○則不填,這個數字還是要跳過去.填完後,把方陣旋轉180度後再從1~n*n往○里填數,沒有○的地方就不填,跳過數字.因為對稱的原理,因此這回填的數剛好是上次跳過的數,這次跳過的剛好是上次填過的數.就形成了一個雙偶數階幻方.
下面介紹一下構造單偶數階幻方的方法——斯特雷奇法
仍然是把單偶數階幻方分成A、B、C、D四個小方陣,若按平面直角坐標系來看則第一、二、三、四象限分別為A、C、B、D(請一定注意A、B、C、D的位置!)再用連續擺數法將A、B、C、D填入數字,A方陣用1~a^2,B方陣用(a^2+1)~2a^2,C方陣用(2a^2+1)~3a^2,D用數字(3a^2+1~4a^2).其中a=n/2.
這樣的方陣還需進行調整.在A的中間一行左側第2列起取m個方格(這里m=(n-2)/4),即取((n/4+0.5),2)~((n/4+0.5),(2+m))這幾個方格,再取A中其它行的左邊m個方格.把這些方格中的數字同D中相應方格中的數字對調.然後在C中各列的從右邊起的m-1個方格重的數字同B中對調.
這樣形成的大方陣就是幻方了.

❻ 幻方的構造原理

在《射鵰英雄傳》中郭黃二人被裘千仞追到黑龍潭,躲進瑛姑的小屋。瑛姑出了一道題:數字1~9填到三行三列的表格中,要求每行、每列、及兩條對角線上的和都相等。這道題難倒了瑛姑十幾年,被黃蓉一下子就答出來了。 492357816這就是一個最簡單的3階平面幻方。因為幻方的智力性和趣味性,很多游戲和玩具都與幻方有關,如捉放曹、我們平時玩的六面體,也成為學習編程時的常見問題。
幻方又稱縱橫圖、九宮圖,最早記錄於中國古代的洛書。夏禹治水時,河南洛陽附近的大河裡浮出了一隻烏龜,背上有一個很奇怪的圖形,古人認為是一種祥瑞,預示著洪水將被夏禹王徹底制服。後人稱之為洛書或河圖,又叫河洛圖。
南宋數學家楊輝,在他著的《續古摘奇演算法》里介紹了這種方法:只要將九個自然數按照從小到大的遞增次序斜排,然後把上、下兩數對調,左、右兩數也對調;最後再把中部四數各向外面挺出,幻方就出現了。(摘自《趣味數學辭典》)
最簡單的幻方就是平面幻方,還有立體幻方、高次幻方等。對於立體幻方、高次幻方世界上很多數學家仍在研究,只討論平面幻方。
對平面幻方的構造,分為三種情況:N為奇數、N為4的倍數、N為其它偶數(4n+2的形式)
1、 N 為奇數時,最簡單:
⑴ 將1放在第一行中間一列;
⑵ 從2開始直到n×n止各數依次按下列規則存放:
按 45°方向行走,如向右上
每一個數存放的行比前一個數的行數減1,列數加1
⑶ 如果行列范圍超出矩陣范圍,則回繞。
例如1在第1行,則2應放在最下一行,列數同樣加1;
⑷ 如果按上面規則確定的位置上已有數,或上一個數是第1行第n列時,
則把下一個數放在上一個數的下面。
2、 N為4的倍數時
採用對稱元素交換法。
首先把數1到n×n按從上至下,從左到右順序填入矩陣
然後將方陣的所有4×4子方陣中的兩對角線上位置的數關於方陣中心作對
稱交換,即a(i,j)與a(n+1-i,n+1-j)交換,所有其它位置上的數不變。
(或者將對角線不變,其它位置對稱交換也可)
**以上方法只適合於n=4時**
3、 N 為其它偶數時
當n為非4倍數的偶數(即4n+2形)時:首先把大方陣分解為4個奇數(2m+1階)子方陣。
按上述奇數階幻方給分解的4個子方陣對應賦值
由小到大依次為上左子陣(i),下右子(i+v),上右子陣(i+2v),下左子陣(i+3v),
即4個子方陣對應元素相差v,其中v=n*n/4
四個子矩陣由小到大排列方式為 ① ③
④ ②
然後作相應的元素交換:a(i,j)與a(i+u,j)在同一列做對應交換(j<t或j>n-t+2),
a(t-1,0)與a(t+u-1,0);a(t-1,t-1)與a(t+u-1,t-1)兩對元素交換
其中u=n/2,t=(n+2)/4 上述交換使行列及對角線上元素之和相等。
C語言實現 #includestdio.h#includemath.hinta[256][256];intsum;intcheck();voidins(intn);voidmain(){inti,j,n,k,t,p,x;scanf(%d,&n);sum=(n*n+1)*n/2;if(n%2==1)//奇數幻方ins(n);if(n%4==2){//單偶數幻方k=n/2;ins(k);for(i=0;i<k;i++)for(j=0;j<k;j++){a[i][j+k]=a[i][j]+2*k*k;a[i+k][j]=a[i][j]+3*k*k;a[i+k][j+k]=a[i][j]+k*k;}t=(n-2)/4;for(i=0;i<k;i++)for(j=0;j<k;j++){if((j<t)&&(i<t)){p=a[i][j];a[i][j]=a[i+k][j];a[i+k][j]=p;}if((j<t)&&(i>k-t-1)){p=a[i][j];a[i][j]=a[i+k][j];a[i+k][j]=p;}if((i>=t&&i<=k-t-1)&&(j>=t&&j<t*2)){p=a[i][j];a[i][j]=a[i+k][j];a[i+k][j]=p;}if(j>1&&j<=t){p=a[i][j+k];a[i][j+k]=a[i+k][j+k];a[i+k][j+k]=p;}}}if(n%4==0){//雙偶數幻方x=1;for(i=0;i<n;i++)for(j=0;j<n;j++)a[i][j]=x++;for(i=0;i<n;i++)for(j=0;j<n;j++){if(i%4==0&&abs(i-j)%4==0)for(k=0;k<4;k++)a[i+k][j+k]=n*n-a[i+k][j+k]+1;elseif(i%4==3&&(i+j)%4==3)for(k=0;k<4;k++)a[i-k][j+k]=n*n-a[i-k][j+k]+1;}}if(check(n)==1){for(i=0;i<n;i++){for(j=0;j<n;j++)printf(%5d,a[i][j]);printf( );}}}intcheck(intn){//檢驗是否是幻方inti,j,sum1=0,sum2;for(i=0;i<n;i++){for(j=0;j<n;j++)sum1+=a[i][j];if(sum1!=sum)return0;sum1=0;}for(i=0;i<n;i++){for(j=0;j<n;j++)sum1+=a[i][j];if(sum1!=sum)return0;sum1=0;}for(sum1=0,sum2=0,i=0,j=0;i<n;i++,j++){sum1+=a[i][j];sum2+=a[i][n-j-1];}if(sum1!=sum)return0;if(sum2!=sum)return0;elsereturn1;}voidins(intn){//單偶數幻方的輸入intx,y,m;x=0;y=n/2;for(m=1;m<=n*n;m++){a[x][y]=m;if(m%n!=0){x--;y++;if(x<0)x=x+n;if(y==n)y=n-y;}else{x++;if(x==n)x=x-n;}}}//c++語言實現//(1)求奇數幻方#include<iostream.h>#include<iomanip.h>intmain(){intn,x,y,tot=0,i,j,a[100][100]={0};cout<<請輸入一個奇數<<endl;cin>>n;a[i=n/2][j=0]=++tot;i--;j--;while(tot<=n*n){i<0?i=n-1:i=i;j<0?j=n-1:j=j;if(a[i][j]){i=x;j=y+1;}a[i][j]=++tot;x=i;y=j;i--;j--;}for(i=0;i<n;i++){for(j=0;j<n;j++)cout<<setw(3)<<a[i][j];cout<<endl;}return0;}//(2)求單偶幻方#include<iostream.h>#include<iomanip.h>intmain(){intn,i=0,j=0,a[100][100],tot=0;cout<<請輸入4的倍數<<endl;cin>>n;for(i=0;i<n;i++)for(j=0;j<n;j++){a[i][j]=++tot;}for(i=0;i<n;i++){for(j=0;j<n;j++){if(i%4==j%4||i%4+j%4==3)a[i][j]=n*n+1-a[i][j];}}for(i=0;i<n;i++){for(j=0;j<n;j++){cout<<setw(4)<<a[i][j];}cout<<endl;}return0;}奇階幻方
當n為奇數時,我們稱幻方為奇階幻方。可以用Merzirac法與loubere法實現,根據我的研究,發現用國際象棋之馬步也可構造出更為神奇的奇幻方,故命名為horse法。
偶階幻方
當n為偶數時,我們稱幻方為偶階幻方。當n可以被4整除時,我們稱該偶階幻方為雙偶幻方;當n不可被4整除時,我們稱該偶階幻方為單偶幻方。可用了Hire法、Strachey以及YinMagic將其實現,Strachey為單偶模型,我對雙偶(4m階)進行了重新修改,製作了另一個可行的數學模型,稱之為Spring。YinMagic是我於2002年設計的模型,他可以生成任意的偶階幻方。
在填幻方前我們做如下約定:如填定數字超出幻方格範圍,則把幻方看成是可以無限伸展的圖形,如下圖:
Merzirac法生成奇階幻方
在第一行居中的方格內放1,依次向右上方填入2、3、4…,如果右上方已有數字,則向下移一格繼續填寫。如下圖用Merziral法生成的5階幻方: 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 loubere法生成奇階幻方
在居中的方格向上一格內放1,依次向右上方填入2、3、4…,如果右上方已有數字,則向上移二格繼續填寫。如下圖用Louberel法生成的5階幻方: 23 6 19 2 15 10 18 1 14 22 17 5 13 21 9 4 12 25 8 16 11 24 7 20 3 Hire法生成偶階幻方
將n階幻方看作一個矩陣,記為A,其中的第i行j列的數字記為a(i,j)。在A內兩對角線上填寫1、2、3、……、n,各行再填寫1、2、3、……、n,使各行各列數字之和為n*(n+1)/2。填寫方法為:第1行從n到1填寫,從第2行到第n/2行按從1到進行填寫(第2行第1列填n,第2行第n列填1),從第n/2+1到第n行按n到1進行填寫,對角線的方格內數字不變。如下所示為6階填寫方法:
1 5 4 3 2 6
6 2 3 4 5 1
1 2 3 4 5 6
6 5 3 4 2 1
6 2 4 3 5 1
1 5 4 3 2 6
如下所示為8階填寫方法(轉置以後):
1 8 1 1 8 8 8 1
7 2 2 2 7 7 2 7
6 3 3 3 6 3 6 6
5 4 4 4 4 5 5 5
4 5 5 5 5 4 4 4
3 6 6 6 3 6 3 3
2 7 7 7 2 2 7 2
8 1 8 8 1 1 1 8
將A上所有數字分別按如下演算法計算,得到B,其中b(i,j)=n×(a(i,j)-1)。則AT+B為目標幻方
(AT為A的轉置矩陣)。如下圖用Hire法生成的8階幻方:
1 63 6 5 60 59 58 8
56 10 11 12 53 54 15 49
41 18 19 20 45 22 47 48
33 26 27 28 29 38 39 40
32 39 38 36 37 27 26 25
24 47 43 45 20 46 18 17
16 50 54 53 12 11 55 9
57 7 62 61 4 3 2 64
⑴.Strachey法生成單偶幻方
將n階單偶幻方表示為4m+2階幻方。將其等分為四分,成為如下圖所示A、B、C、D四個2m+1階奇數幻方。
A C
D B
A用1至2m+1填寫成(2m+1)2階幻方;B用(2m+1)2+1至2*(2m+1)2填寫成2m+1階幻方;C用2*(2m+1)2+1至3*(2m+1)2填寫成2m+1階幻方;D用3*(2m+1)2+1至4*(2m+1)2填寫成2m+1階幻方;在A中間一行取m個小格,其中1格為該行居中1小格,另外m-1個小格任意,其他行左側邊緣取m列,將其與D相應方格內交換;B與C接近右側m-1列相互交換。如下圖用Strachey法生成的6階幻方:
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
⑵Spring法生成以偶幻方
將n階雙偶幻方表示為4m階幻方。將n階幻方看作一個矩陣,記為A,其中的第i行j列方格內的數字記為a(i,j)。
先令a(i,j)=(i-1)*n+j,即第一行從左到可分別填寫1、2、3、……、n;即第二行從左到可分別填寫n+1、n+2、n+3、……、2n;…………之後進行對角交換。對角交換有兩種方法:
方法一;將左上區域i+j為偶數的與幻方內以中心點為對稱點的右下角對角數字進行交換;將右上區域i+j為奇數的與幻方內以中心點為對稱點的左下角對角數字進行交換。(保證不同時為奇或偶即可。)
方法二;將幻方等分成m*m個4階幻方,將各4階幻方中對角線上的方格內數字與n階幻方內以中心點為對稱點的對角數字進行交換。
如下圖用Spring法生成的4階幻方:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
YinMagic構造偶階幻方
先構造n-2幻方,之後將其中的數字全部加上2n-2,放於n階幻方中間,再用該方法將邊緣數字填寫完畢。該方法適用於n>4的所有幻方,我於2002年12月31日構造的數學模型。YinMagic法可生成6階以上的偶幻方。如下圖用YinMagic法生成的6階幻方:
10 1 34 33 5 28
29 23 22 11 18 8
30 12 17 24 21 7
2 26 19 14 15 35
31 13 16 25 20 6
9 36 3 4 32 27
魔鬼幻方
如將幻方看成是無限伸展的圖形,則任何一個相鄰的n*n方格內的數字都可以組成一個幻方。則稱該幻方為魔鬼幻方。
用我研究的Horse法構造的幻方是魔鬼幻方。如下的幻方更是魔鬼幻方,因為對於任意四個在兩行兩列上的數字,他們的和都是34。此幻方可用YinMagic方法生成。
15 10 3 6
4 5 16 9
14 11 2 7
1 8 13 12
羅伯法:
1居上行正中央,依次斜填右上方,上出框往下填,
右出框左邊放,排重便在下格填,右上排重一個樣。

❼ 幻方的程序編寫

利用計算機編程序,可求解出任意階幻方.(但數字位數受電腦限制,實際上只能是有限范圍內的任意階),如利用Matlab進行計算n階幻方,其命令為:A=magic(n)。
對於某些平方幻方,高次幻方,利用計算機輔助計算,也可快速求得。
一次幻方,一次幻立方,一次多維幻方,甚至可用簡單公式全部求得。
某些類型的平方幻方,甚至高次高維幻方,也可用公式求得。
在幻方公式求解方法,中國處於世界領先水平.中國李文的高維高次幻方公式,是幻方理論中的精品.吳碩辛的高次幻方理論,也可用公式求解。

❽ 如何用c語言編程使三階幻方不等(使用數字1至9,直接輸出所有結果

4用1至9這9個數編制一個三階幻方,寫出所有可能的結果。所謂幻方是指在正方形的方格表的每個方格內填入不同的數,使得每行、每列和兩條對角線上的各數之和...3119

❾ 如何用c語言編程使三階幻方不等

這個列印n階的 0<n<=15是奇數 我在下面幫你改了個3階的
/* bookp33.c 列印魔方陣程序 */
/* 譚浩強,C程序設計題解與上機指導,33頁 */
/* 在tc30下編譯通過 */
/* 2001.12.12 */
void main()
{
int a[16][16],i,j,k,p,m,n;
p=1;
while(p==1)
{ printf("請輸入n.(0<n<=15,n是奇數.)\n");
scanf("%d",&n);
if((n>=0)&&(n<=15)&&(n%2!=0))
{ printf("矩陣階數是:%d\n",n);
p=0;
}
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
/* 建立魔方陣 */
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{ i=i-1;
j=j+1;
if((i<1)&&(j>n))
{ i=i+2;
j=j-1;
}
else
{if(i<1) i=n; if(j>n) j=1; }
if(a[i][j]==0)
a[i][j]=k;
else
{ i=i+2;
j=j-1;
a[i][j]=k;
}
}
/* 輸出 */
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
printf(" %3d",a[i][j]);
printf("\n");
}
}

*************3階的************
int main()
{
int a[16][16],i,j,k,n;
n=3;

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
/* 建立魔方陣 */
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{ i=i-1;
j=j+1;
if((i<1)&&(j>n))
{ i=i+2;
j=j-1;
}
else
{if(i<1) i=n; if(j>n) j=1; }
if(a[i][j]==0)
a[i][j]=k;
else
{ i=i+2;
j=j-1;
a[i][j]=k;
}
}
/* 輸出 */
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
printf(" %3d",a[i][j]);
printf("\n");
}

return (1);
}

❿ matab編程實現:幻方矩陣中的1換成什麼數該矩陣不可逆


建議樓上的回答問題之前多想一想,不了解的東西盡量不要想當然,以免誤人誤己。

同一階的幻方矩陣當然不止一個,但MATLAB是按照固定的演算法來生成的,所以你每次調用得到的結果都是相同的。

你可以通過以下幾種方式來得到幻方矩陣的其它形式:

  • 上下翻轉(flipud);

  • 左右翻轉(fliplr);

  • 轉置(transpose)。

可以檢驗,除用magic函數直接得到的幻方矩陣之外,另外還有7種形式:

m=magic(4)
flipud(m)
fliplr(m)
transpose(m)
flipud(fliplr(m))
flipud(transpose(m))
fliplr(transpose(m))
flipud(fliplr(transpose(m)))



熱點內容
java忙 發布:2025-04-06 07:29:39 瀏覽:211
安卓移動終端平台是什麼 發布:2025-04-06 07:24:52 瀏覽:773
資料庫集群部署 發布:2025-04-06 07:24:03 瀏覽:586
微信android50 發布:2025-04-06 07:23:52 瀏覽:886
和平精英現在開到120幀要什麼配置 發布:2025-04-06 07:23:19 瀏覽:150
編譯原因有哪些 發布:2025-04-06 07:23:16 瀏覽:688
按摩椅藍牙密碼是什麼 發布:2025-04-06 07:20:45 瀏覽:351
伺服器關閉某一個IP 發布:2025-04-06 07:18:26 瀏覽:281
安卓手機mct在哪裡下載 發布:2025-04-06 07:18:20 瀏覽:132
偶像來了偷花腳本 發布:2025-04-06 07:11:03 瀏覽:208