导航:首页 > 编程语言 > 用程序写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阶幻方相关的资料

热点内容
javaweb爬虫程序 浏览:537
word中千位分隔符 浏览:392
迷你编程七天任务的地图怎么过 浏览:844
word2003格式不对 浏览:86
百度云怎么编辑文件在哪里 浏览:304
起名app数据哪里来的 浏览:888
微信怎么去泡妞 浏览:52
百度广告html代码 浏览:244
qq浏览器转换完成后的文件在哪里 浏览:623
jsp中的session 浏览:621
压缩完了文件去哪里找 浏览:380
武装突袭3浩方联机版本 浏览:674
网络机顶盒移动网络 浏览:391
iphone手机百度云怎么保存到qq 浏览:148
数据库设计与实践读后感 浏览:112
js对象是什么 浏览:744
网页文件存pdf 浏览:567
文件夹正装 浏览:279
刚复制的文件找不到怎么办 浏览:724
试运行适用于哪些体系文件 浏览:987

友情链接