導航:首頁 > 編程語言 > 用程序寫3階幻方

用程序寫3階幻方

發布時間:2023-02-15 07:12:21

Ⅰ c語言實現 3階幻方

#include<stdio.h>
int main()
{
int i,j,i1,j1,x,a[100][100];
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
a[i][j] = 0;
}
i=1;
j = (int)((3+1)/2);
x=1;
while(x<=3*3)
{
a[i][j] = x;
x++;
i1=i;
j1=j;
i--;
j--;
if(i==0)
i=3;
if(j==0)
j=3;
if(a[i][j] != 0)
{
i = i1+1;
j = j1;
}
}
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
return 1;
}

Ⅱ c語言 如何求三階魔方陣,最好帶注釋

#include <stdio.h>

#include <math.h>

#define N 100 /*N可以改變*/

void main()

{

int n,p=1;

void jici(int n);

void sioubeishu(int n);

void oubeishu(int n);

void sijibeishu(int n);

void elseoushu(int n);

printf("***說明(本程序用於輸出任意數階次的魔方矩陣,其行,列,對角線之和的均值相同。) ");

printf(" ***說明(最右邊的,和最下邊的用於統計每行,每列的元素之和 。) ");

printf(" 請輸入一個要求階次的魔方矩陣的邊長(2~%d): ",N);

while(p)

{

scanf("%d",&n);

if((n>1)&&(n<=N))

p=0;

}

if(fabs((n-1)%2)<1e-006)

jici(n);

else

if(fabs((n%4))<1e-006)

{

if(n==4) oubeishu(n);

else

if(fabs(n%8)<1e-006)

sioubeishu(n);

else

sijibeishu(n);

}

else

elseoushu(n);

}


void jici(int n)

{

int a[N][N]={0};

int i,j,k,sum;

i=0;

j=(n-1)/2;

a[0][j]=1;

for(k=2;k<=n*n;k++)

{

i=i-1;

j=j+1;

if((i<0)&&(j>n-1))

{

i=i+2;j=j-1;

}

else

{

if(i<0) i=n-1;

if(j>n-1) j=0;

}

if(a[i][j]==0) a[i][j]=k;

else

{

i=i+2;

j=j-1;

a[i][j]=k;

}

}

sum=0;

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

{

sum=sum+a[i][j];

}

a[n][n]=sum;

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

{

sum=0;

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

sum=sum+a[i][j];

a[i][n]=sum;

}

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

{

sum=0;

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

sum=sum+a[i][j];

a[n][j]=sum;

}

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

{

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

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

printf(" ");

}

}

void oubeishu(int n)

{

int a[N][N]={0};

int k,t,i,j,sum;

k=1;

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

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

{

a[i][j]=k;

k++;

}

for(i=0,j=0;i<n/2;i++,j++)

{

t=a[i][j];

a[i][j]=a[n-1-i][n-1-j];

a[n-1-i][n-1-j]=t;

}

for(i=0,j=n-1;i<n/2;i++,j--)

{

t=a[i][j];

a[i][j]=a[n-1-i][n-1-j];

a[n-1-i][n-1-j]=t;

}

sum=0;

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

{

sum=sum+a[i][j];

}

a[n][n]=sum;

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

{

sum=0;

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

sum=sum+a[i][j];

a[i][n]=sum;

}

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

{

sum=0;

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

sum=sum+a[i][j];

a[n][j]=sum;

}

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

{

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

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

printf(" ");

}

}

void sioubeishu(int n)

{

int a[N][N]={0};

int k,t,i,j,x,y,sum;

k=1;

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

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

{

a[i][j]=k;

k++;

}

for(x=1;x<=n/8;x++)

for(y=1;y<=n/4;y++)

{

for(i=4*(x-1),j=4*(y-1);i<=4*x-1;i++,j++)

{

t=a[i][j];

a[i][j]=a[n-1-i][n-1-j];

a[n-1-i][n-1-j]=t;

}

for(i=4*x-1,j=4*(y-1);i>=4*(x-1);i--,j++)

{

t=a[i][j];

a[i][j]=a[n-1-i][n-1-j];

a[n-1-i][n-1-j]=t;

}

}

sum=0;

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

{

sum=sum+a[i][j];

}

a[n][n]=sum;

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

{

sum=0;

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

sum=sum+a[i][j];

a[i][n]=sum;

}

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

{

sum=0;

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

sum=sum+a[i][j];

a[n][j]=sum;

}

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

{

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

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

printf(" ");

}

}

void sijibeishu(int n)

{

int a[N][N]={0};

int k,t,i,j,x,y,sum;

k=1;

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

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

{

a[i][j]=k;

k++;

}

for(x=1;x<=(n-4)/8;x++)

for(y=1;y<=n/4;y++)

{

for(i=4*(x-1),j=4*(y-1);i<=4*x-1;i++,j++)

{

t=a[i][j];

a[i][j]=a[n-1-i][n-1-j];

a[n-1-i][n-1-j]=t;

}

for(i=4*x-1,j=4*(y-1);i>=4*(x-1);i--,j++)

{

t=a[i][j];

a[i][j]=a[n-1-i][n-1-j];

a[n-1-i][n-1-j]=t;

}

}

x=(n+4)/8;

for(y=1;y<(n+4)/8;y++)

{

for(i=4*(x-1),j=4*(y-1);i<=4*x-1;i++,j++)

{

t=a[i][j];

a[i][j]=a[n-1-i][n-1-j];

a[n-1-i][n-1-j]=t;

}

for(i=4*x-1,j=4*(y-1);i>=4*(x-1);i--,j++)

{

t=a[i][j];

a[i][j]=a[n-1-i][n-1-j];

a[n-1-i][n-1-j]=t;

}

}

y=(n+4)/8;

for(i=4*(x-1),j=4*(y-1);i<=4*x-3;i++,j++)

{

t=a[i][j];

a[i][j]=a[n-1-i][n-1-j];

a[n-1-i][n-1-j]=t;

}

for(i=4*x-1,j=4*(y-1);i>=4*x-2;i--,j++)

{

t=a[i][j];

a[i][j]=a[n-1-i][n-1-j];

a[n-1-i][n-1-j]=t;

}

sum=0;

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

{

sum=sum+a[i][j];

}

a[n][n]=sum;

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

{

sum=0;

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

sum=sum+a[i][j];

a[i][n]=sum;

}

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

{

sum=0;

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

sum=sum+a[i][j];

a[n][j]=sum;

}

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

{

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

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

printf(" ");

}

}

void elseoushu(int n)

{

int a[N][N]={0};

int m,k,i,j,sum,u,t,h;

m=n/2;

i=0;

j=(m-1)/2;

a[0][j]=1;

for(k=2;k<=m*m;k++)

{

i=i-1;

j=j+1;

if((i<0)&&(j>m-1))

{

i=i+2;j=j-1;

}

else

{

if(i<0) i=m-1;

if(j>m-1) j=0;

}

if(a[i][j]==0) a[i][j]=k;

else

{

i=i+2;

j=j-1;

a[i][j]=k;

}

}

i=0;

j=(m-1)/2+m;

a[i][j]=m*m*2+1;

for(k=m*m*2+2;k<=m*3*m;k++)

{

i=i-1;

j=j+1;

if((i<0)&&(j>m*2-1))

{

i=i+2;

j=j-1;

}

else

{

if(i<0) i=m-1;

if(j>m*2-1) j=m;

}

if(a[i][j]==0) a[i][j]=k;

else

{

i=i+2;

j=j-1;

a[i][j]=k;

}

}

i=m;

j=(m-1)/2;

a[i][j]=m*m*3+1;

for(k=m*m*3+2;k<=m*4*m;k++)

{

i=i-1;

j=j+1;

if((i<m)&&(j>m-1))

{

i=i+2;j=j-1;

}

else

{

if(i<m) i=m*2-1;

if(j>m-1) j=0;

}

if(a[i][j]==0) a[i][j]=k;

else

{

i=i+2;

j=j-1;

a[i][j]=k;

}

}

i=m;

j=(m-1)/2+m;

a[i][j]=m*m+1;

for(k=m*m+2;k<=2*m*m;k++)

{

i=i-1;

j=j+1;

if((i<m)&&(j>m-1+m))

{

i=i+2;

j=j-1;

}

else

{

if(i<m) i=m*2-1;

if(j>m*2-1) j=m;

}

if(a[i][j]==0) a[i][j]=k;

else

{

i=i+2;

j=j-1;

a[i][j]=k;

}

}

t=(n+2)/4;u=n/2;

for(j=0;j<t-1;j++)

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

{

h=a[i][j];

a[i][j]=a[i+m][j];

a[i+m][j]=h;

}

for(j=n-t+2;j<n;j++)

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

{

h=a[i][j];

a[i][j]=a[i+m][j];

a[i+m][j]=h;

}

{

h=a[t-1][0];

a[t-1][0]=a[t+u-1][0];

a[t+u-1][0]=h;

}

{

h=a[t-1][t-1];

a[t-1][t-1]=a[t+u-1][t-1];

a[t+u-1][t-1]=h;

}

sum=0;

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

{

sum=sum+a[i][j];

}

a[n][n]=sum;

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

{

sum=0;

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

sum=sum+a[i][j];

a[i][n]=sum;

}

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

{

sum=0;

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

sum=sum+a[i][j];

a[n][j]=sum;

}

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

{

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

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

printf(" ");

}

}

這個是我自己編的魔方矩陣的任意數輸出程序, 用的是數組方面的內容,比較好理解

Ⅲ C或C++編寫三階幻方

它分奇偶數的。
奇數的規律比較明確,偶數也有規律。
三階
8 1 6
3 5 7
4 9 2
五階
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
對於三階
數1都在第一行的正中央(1行2列),然後你往它的上一行,下一列(0行3列,由於沒有0行,就往最底下去。變成3行3列),接著就是2行1列
然後再1行2列,由於已經被1給佔了,那麼第4個數就放在1的正下方,反復如此就可以得到奇數階的幻方數。

4階
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

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

8階
64 2 3 61 60 6 7 57
9 55 54 12 13 51 50 16
17 47 46 20 21 43 42 24
40 26 27 37 36 30 31 33
32 34 35 29 28 38 39 25
41 23 22 44 45 19 18 48
49 15 14 52 53 11 10 56
8 58 59 5 4 62 63 1
偶數價我給忘了。但是我記得好像是4的倍數跟不是4的倍數,演算法還不一樣。

Ⅳ 3階幻方怎麼寫

填寫3階幻方的口訣:

居上行正中央,依次斜填切莫忘,上出框界往下寫,右出框時左邊放,重復便在下格填,出角重復一個樣。

口訣解釋如下:

居上行正中央——數字 1 放在首行最中間的格子中;

依次斜填切莫忘——向右上角斜行,依次填入數字;

上出框界往下寫——如果右上方向出了上邊界,就以出框後的虛擬方格位置為基準,將數字豎直降落至底行對應的格子中;

右出框時左邊放——同上,向右出了邊界,就以出框後的虛擬方格位置為基準,將數字平移至最左列對應的格子中;

重復便在下格填——如果數字{N} 右上的格子已被其它數字佔領,就將{N+1} 填寫在{N}下面的格子中;

出角重復一個樣——如果朝右上角出界,和「重復」的情況做同樣處理。

「蘿卜」法 一 居 上 行 正 中 央 依 次 填 在 右 上 角 8 1 6 上 出 框 時 下 邊 填 3 5 7 右 出 框 時 左 邊 放 4 9 2 斜 出 框 時 下 邊 放 排 重 便 在 下 格 填 九階幻方也同樣適用哦!

(4)用程序寫3階幻方擴展閱讀:

一、三階幻方是最簡單的幻方,是由9個數字組成的一個三行三列的矩陣,其每一行、每一列和兩條對角線的數字的和(稱為幻和值)都相等。

如用1、3、5、9、11、13、17、19、21這9個數字組成的三階幻方:

19 1 13

5 11 17

9 21 3

幻和值=33。

最簡單的三階幻方是用1、2、3、4、5、6、7、8、9這9個數組成的:

6 1 8

7 5 3

2 9 4

幻和值=15。

二、3階幻方的性質:

下面是用1-9構成的3階幻方:

8 1 6

3 5 7

4 9 2

幻和值=15。

性質一:幻和值=3×5(3×中心格數);

性質二:2×8=9+7,2×4=1+7,2×6=3+9,2×2=1+3;即:2×角格的數=非相鄰的2個邊格數之和。

性質三:以中心對稱的2個數相加的和相等,這2個數的和值=2×中心格數。

性質四:幻方的每個數乘以X,再加Y,幻方亦成立。

例如把1-9構成的3階幻方的每個數乘以3,再加3:

27 6 21

12 18 24

15 30 9

幻和值=54

性質五:3個一組的數,組與組等差,每組數與數等差,這樣的數能構成3階幻方。

例如以下3組9個數:

【2、4、6】、【13、15、17】、【24、26、28】構成幻方,

26 2 17

6 15 24

13 28 4

幻和值=45。

三、2個推論:

(由性質三)推論:以中心對稱的2個數同為偶數或同為奇數;

(由性質二、三)推論:4個邊格數同為偶數或同為奇數。

Ⅳ 求高手用c++程序編寫一個三階幻方,要用c++哦

#include "iostream.h" int main() { int magic[3][3],i=0,j=1,num; const int m=3; for (i=0;i<3;i++) for(j=0;j<3;j++) magic[i][j]=0; magic[0][1]=1; i=0;j=1; for (num=2;num<=9;num++) { if (magic[(i-1+m)%m][(j+1)%m]) i++; else { i=(i+2)%m; j=(j+1)%m; } magic[i][j]=num; } for(i=0;i<3;i++) { for (j=0;j<3;j++) { cout<<magic[i][j]<<'\t'; } cout<<endl; } return 0; }

麻煩採納,謝謝!

Ⅵ 做一個三階幻方,使每行,每列,每條對角線上的三個數之和都等於60

一、3階幻方的幻和值N=3×中心格數.

(證明方法:兩條對角線和中間行的3組數之和=3N,變式為:1、3列之和+3×中心格數=3N,即,2N+3×中心格數=3N,得:N=3×中心格數.)

3×中心格數=60,得:中心格數=20

二、那麼,什麼樣的數能構成3階幻方呢?

3個數一組的3組數(共9個數),組與組等差,每組數與數等差,這樣的數能構成3階幻方.

【文字啰嗦,直接看圖】

等等.

其中的數也可是負數,就不一一列舉了.

閱讀全文

與用程序寫3階幻方相關的資料

熱點內容
蘋果5s換屏屏幕不亮了 瀏覽:77
qq文件其他軟體打開 瀏覽:468
win10區域網共享剪輯 瀏覽:621
鑒定文件圖樣包含哪些 瀏覽:193
文件處理格式 瀏覽:831
36周的數據是多少 瀏覽:950
裝win10系統重新分區嗎 瀏覽:882
微信已被清理的文件 瀏覽:771
ug8的例圖在哪個文件夾里 瀏覽:641
dat文件轉換avi 瀏覽:173
安卓編程里上下邊距怎麼寫 瀏覽:427
雲班課文件在哪個文件夾 瀏覽:298
健康碼用到了哪些方面的大數據 瀏覽:379
蘋果手機拆裝教程 瀏覽:244
excel抓取文件鏈接 瀏覽:510
魔靈召喚主角升級 瀏覽:746
linux文件系統實驗 瀏覽:897
怎麼讀取電腦資料庫中的數據 瀏覽:443
蘋果7怎麼開啟鎖屏密碼 瀏覽:98
怎麼找到圖片上的文件 瀏覽:644

友情鏈接