C或C++编写三阶幻方

作者&投稿:博花 (若有异议请与网页底部的电邮联系)
求高手用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]<<''; } cout<<endl; } return 0; }

麻烦采纳,谢谢!

这个打印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是奇数.)
");
scanf("%d",&n);
if((n>=0)&&(n<=15)&&(n%2!=0))
{ printf("矩阵阶数是:%d
",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((in))
{ i=i+2;
j=j-1;
}
else
{if(in) 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("
");
}
}

*************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((in))
{ i=i+2;
j=j-1;
}
else
{if(in) 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("
");
}

return (1);
}

它分奇偶数的。
奇数的规律比较明确,偶数也有规律。
三阶
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的倍数,算法还不一样。

用 罗伯法 构建数学模型
由于回答方式仅限于文本
自己找吧。。。


6阶幻方怎么填,最好有图
每一行,每一列,对角线的和值(称为幻和值)为111。二、对调法 用1-9、10-18、19-27、28-36,组成A、B、C、D四个3阶幻方,如图排列,A、D三个数字交换保证每行1个数字,每条对角线2个数字。三、六阶幻方最完美布局 用YinMagic构造偶阶幻方先构造n-2阶幻方,之后将其中的数字全部加上2n...

3阶幻方怎么解?
答案、解法如下图:1、设这个幻方的其余数为a、b、c、d、e、f。2、根据3阶幻方的性质之一:2×角格数=非相邻的2个边格之和。(证明方法:如图二。两条红线的2组数之和=两条蓝线的2组数之和,消去相同项,即可)2×f=(-5)+(-11),得:f=-8 3、又根据3阶幻方的性质之一:幻和值...

求幻方习题
例3. 将1~9这九个数字分别填入图1中所示的空格中,使得前两行所构成的两个三位数之和等于第三行的三个数,并且相邻(上下或左右)的两个数奇偶性不同。分析:由于1、5已填好,按照奇偶相间的要求,五个奇数应在四个角及中心,如图2。例4. 写出一个三阶幻方,使其幻和为24。因为三阶幻方...

填三阶幻方的秘诀
首先:把1写在首行的正中央。然后:从2开始依次向上一个数上方写,直到最后一个。特殊情况:1.上一个数在最右列的,下一个数写在上一个数上面一行的最左格。2.上一个数在最上行的,下一个数写在上一个数右面一列的最下格。3.上一个数在右上角的,下一个数写在上一个数的下面一格。4.上...

三阶幻方题(没听懂卷子后天交 急啊!)
。。。这9个数都能被3整除啊,除以3结果是-9啊,怎么会没法?这样填: 6 -15 0 -9 -3 3 -6 9 -12

如何将下面的三阶幻方补充完整?
一、答案:(13) 15 5 3 (11) 19 (17) (7) (9)二、方法:设每行之和为X,并且设三阶幻方 为:(A) 15 5 3 (B) 19 (C) (D) (E)则有:式一:X=A+B+E;式二:A=X-15-5=X-20;式三:B=X-3-19=X-22;式四:A=X-5...

C语言求所有四阶幻方?
include <stdio.h> include <stdlib.h> include <windows.h> define EVEN_DOUBLE_4 4\/\/双偶的最基本类型,4阶双偶 define SCREEN_SIZE 19\/\/屏幕显示不变形的最大尺寸(主要是因为窗口大小限制)define MIN_SIZE 3\/\/最小阶数为3 define MAX_SIZE 30 \/*原则上是任意阶,算法是相同的,这里就以...

三阶幻方 2 3 ??? 10
解题步骤及答案如下图:三阶幻方的性质之一:2×中心格数=与中心格对称的两数之和 2c=2+10,解得:c=6 三阶幻方的幻和值N=3×中心格数=3×6=18 每一行、每一列和两条对角线知道了和值及两个数,依次求出第三个数就OK了。

请问:三阶幻方都有那些规律(谢谢)
推论(由性质三):以中心对称的2个数同为偶数或同为奇数;推论(由性质二、三):幻方4个边格数同为偶数或同为奇数。性质四:幻方的每个数乘以A(A≠0),再加X,幻方亦成立。例如把1-9构成的3阶幻方的每个数乘以3,再加3:27621 121824 15309 幻和值=54 性质五:将组成幻方的三组数(如...

求:三阶幻方
此三阶幻方的答案有无数个。三阶幻方的性质之一:2×角格数=非相邻两个边格之和。2a=13+19,解得:a=16 【证明方法:三阶幻方的每一行、每一列和两条对角线的和值都相等。那么,第一行的和+副对角线的和=第二列的和+第三列的和,即:(a+b+c)+(a+d+f)=(b+d+13)+(c+19+f...

未央区17280761162: 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列,由于...

未央区17280761162: 求高手用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...

未央区17280761162: C语言用穷举法编写3*3的幻方 -
栾吕欧博: 这是我用穷举法写的#include "iostream.h" int a[9]; void PaiLie(int n) //生成1~9的全排列 { for(int i=0;i{ for(int i=0;iif(a[i]if(!a[i]) {a[i]=n; if(n>1) PaiLie(n-1); else { if ( //判定横竖斜之和为15 a[0]+a[1]+a[2]==15&&a[3]+a[4]+a[5]==15&&a[6]+a[7]+a[8]=...

未央区17280761162: 怎样用C语言编写幻方 -
栾吕欧博: 你的这个问题实际上包括两个问题: 1、幻方的算法 2、怎样用C语言实现幻方的算法 这两个问题是大不同的.关于幻方的算法,或者叫幻方填法,目前有很多种,拉丁正交、马步法等等,针对奇数或者偶数(又分单偶数和双偶数)等有不同的...

未央区17280761162: 如何用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("...

未央区17280761162: c语言三阶和四阶的换方
栾吕欧博: /** * n阶幻方绦?br> * 完成者:meteor135 * 完成日期:2003.9.8 * 编译环境:VC6.0 */ #include <iostream.h> #include <iomanip.h> #include <math.h> void showFangzhen(int n); int main() { //输出10组幻方,修改这个数字可以得到任意阶幻方 ...

未央区17280761162: 幻方C++的最新制作(30分要吗?谢谢) -
栾吕欧博: #include<iostream.h>#include<iomanip.h>#include<string>#define max 100 int magic[max][max]; class HF //幻方 { private: int n; //幻方的阶乘数 int x,y; //数组的下标,X轴 Y轴 int i,j; //循环变量 int di,dx,dy; //单偶数幻方用 int oucs; //偶数常数 ...

未央区17280761162: 奇数阶幻方C++(调用函数,输出三阶的)为何结果是8,1,6,3,5,7,3,9,2?哪里错了?急求修改! -
栾吕欧博: #include<iostream> using namespace std; void squart(int n,int a[][3])//这个函数有问题 { int i=0,x,y,j=(n-1)/2,k=2,t; //int i_prev,j_prev ;//用i_prev和j_prev变量记录i和j未发生变化前的值 for(i=0;i<n;i++)//这里i<n,不是i<=n { for(j=0;j<n;j++)//这里j<n...

未央区17280761162: 用C++做奇阶幻方的代码,哪里错了啊? -
栾吕欧博: 就个人认为,做幻方就不用标准库了吧.直接用数组不好吗?比较直观.把函数Mat initial(Mat& a)改为void initial(Mat& a) 总感觉 if(a[(n-1+i)%n][((n-1)/2+i)%n]!=0) a[(n-3+i)%n][((n-1)/2+i-1)%n]=i+1; else a[(n-1+i)%n][((n-1)/2+i)%n]=i+1; 好像还不够全面,可能会造成在一个地方死循环 我的感觉就是这样,希望对你有所帮助!

未央区17280761162: 根据三阶行列式编一个C程序 -
栾吕欧博: #include <stdio.h>#include <stdlib.h>#include <math.h>#include <conio.h>#define M 3//矩阵大小 int hanglieshi(int array[M][M]) {//计算行列式 int temp[M][2*M]; int i,j,c,c1; int result=0,t=1; for(i=0;i<M;i++) {//构造临时矩阵,用来计算行列式 for(j=0;...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网