社区
数据结构与算法
帖子详情
谁有好办法找出所有四阶自然数幻方啊!
smdesker
2003-12-21 12:33:08
谁有好办法找出所有四阶自然数幻方啊!还有,四阶的到底有什么个有人知道吧。。。急啊。。。
...全文
54
14
打赏
收藏
谁有好办法找出所有四阶自然数幻方啊!
谁有好办法找出所有四阶自然数幻方啊!还有,四阶的到底有什么个有人知道吧。。。急啊。。。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
smdesker
2003-12-27
打赏
举报
回复
找到yaos以前的贴子。。呵呵谢了。
/*我来贴一个我求4阶幻方总数的程序,运行结果7040*/
/*速度很快,用时不到1s*/
/*还有很大的优化余地*/
#include <stdio.h>
int p[100][4],l=0,t=0;
int q[4],p4[30][4];
long total=0;
int board[4][4];
unsigned long s[100];
void finalJudge()
{
int i,j,k,m,x,y;
for (i=0;i<24;i++)
{
for (j=0;j<24;j++)
{
for (k=0,x=0,y=0;k<4;k++)
{
x+=board[p4[i][k]][p4[j][k]];
y+=board[p4[i][3-k]][p4[j][k]];
}
if (x==34 && y==34)
{
total++;
for (k=0;k<4;k++,printf("\n"))
for (m=0;m<4;m++)
printf("%2d ",board[p4[i][k]][p4[j][m]]);
printf("\n");
}
}
}
}
void construct()
{
int i,j,k,m,x[4];
for (i=0;i<24;i++)
{
for (j=0;j<24;j++)
{
for (k=0;k<4;k++)
{
x[k]=34-p[q[0]][k]-p[q[1]][p4[i][k]]-p[q[2]][p4[j][k]];
board[3][k]=x[k];
if (x[k]<1 || x[k]>16 || !((1l<<(x[k]-1)) & s[q[3]])) break;
for (m=0;m<k;m++)
if (x[m]==x[k]) break;
if (m<k) break;
}
if (k==4)
{
for (k=0;k<4;k++)
board[0][k]=p[q[0]][k];
for (k=0;k<4;k++)
board[1][k]=p[q[1]][p4[i][k]];
for (k=0;k<4;k++)
board[2][k]=p[q[2]][p4[j][k]];
finalJudge();
}
}
}
}
void make(int b,int deep)
{
int i,j,sum;
if (deep>=4)
{
for (j=0,sum=0;j<4;j++)
sum+=(p[l+1][j]=p[l][j]);
if (sum==34)
{
for (j=0,s[l]=0;j<4;j++)
s[l]+=1l<<(p[l][j]-1);
l++;
}
return;
}
for (i=b;i<=16;i++)
{
p[l][deep]=i;
make(i+1,deep+1);
}
}
void makeP44(int deep){
int i,j,flag;
if (deep>=4)
{
for (j=0;j<4;j++)
p4[t+1][j]=p4[t][j];
t++;
return;
}
for (i=0;i<4;i++)
{
p4[t][deep]=i;
flag=1;
for (j=0;j<deep;j++)
if (p4[t][j]==i) flag=0;
if (flag) makeP44(deep+1);
}
}
void solve(int b,int deep)
{
int i,j,flag;
if (deep>=4)
{
construct();
return;
}
for (i=b;i<l;i++)
{
q[deep]=i;
flag=1;
for (j=0;j<deep;j++)
if (s[q[j]] & s[i]) flag=0;
if (flag) solve(i+1,deep+1);
}
}
main(){
/*freopen("1.txt","w",stdout);*/
make(1,0);
makeP44(0);
solve(0,0);
printf("total=%ld\n",total);
}
ilao
2003-12-23
打赏
举报
回复
好多E文!
呵呵
Linevan
2003-12-22
打赏
举报
回复
http://hades.ph.tn.tudelft.nl/Internal/PHServices/Documentation/MathWorld/math/math/m/m029.htm
有好的方法!
ZhangYv
2003-12-22
打赏
举报
回复
精华区有
ilao
2003-12-22
打赏
举报
回复
偶数的
的我也说不清楚
ilao
2003-12-22
打赏
举报
回复
奇数阶的是1在第一行中间
后2在最后一行对角向上排的
到右边后转下
下有数就转左
8 1 6
3 5 7
4 9 2
zalyer
2003-12-22
打赏
举报
回复
你去搜索一下一个叫"龙怪"的网站是一个台湾人搞的,就是对方阵的研究,有很多算法和奇妙的方阵.
yaos
2003-12-22
打赏
举报
回复
还要做一个纪录被使用的数字的模版,每组4个数字也纪录,用二进制与 很容易判断没有使用的数字
yaos
2003-12-22
打赏
举报
回复
比如:
(1,1)+(1,2)+(2,1)+(2,2) = (3,3)+(3,4)+(4,3)+(4,4)
等等
yaos
2003-12-22
打赏
举报
回复
880个
我在386上曾经作过,现在程序不知道扔到什么地方去了。 :)
很快的。不到10分钟。386sx25
现在的计算机,就更快了。
原理是:找到所有的4个数字组合等于(1+16)*16/2/4 = 34,一共1000多,然后
填出前两行,后边的用排除法,很容易填的
因为4阶的规律性太强了,要做做5阶的,很难。
smdesker
2003-12-21
打赏
举报
回复
大哥,我说是所有的啊。。。如何找出来才好。一二个的我多的是,我找了几千了。
还有谁知道总数是多少个啊。。。。可以再加分的。
ilao
2003-12-21
打赏
举报
回复
横向相加为15
纵向相加为15
对角相加为15
ilao
2003-12-21
打赏
举报
回复
四阶自然数幻方
为4*4啦
我写个3*3的
6 1 8
7 5 3
2 9 4
横纵向对角联合相加为15
ilao
2003-12-21
打赏
举报
回复
1 2 3 ............n*n
横纵向对角联合相加为
ns=n*n(n*n+1)/2
所以S=n(n*n+1)/2
这为阶
2015秋七年级数学上册探寻神奇的
幻方
学案无答案新版北师大版
2015秋七年级数学上册探寻神奇的
幻方
学案无答案新版北师大版
小学数学数学故事探险故事荒岛历险24321号房间在哪儿
小学数学数学故事探险故事荒岛历险24321号房间在哪儿
Matlab与数学建模综合练习3 (2).docx
。。。
Matlab与数学建模综合练习3.docx
。。。
二年级经典奥数100题.doc
二年级经典奥数100题.doc
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章