社区
数据结构与算法
帖子详情
谁有好办法找出所有四阶自然数幻方啊!
smdesker
2003-12-21 12:33:08
谁有好办法找出所有四阶自然数幻方啊!还有,四阶的到底有什么个有人知道吧。。。急啊。。。
...全文
88
14
打赏
收藏
谁有好办法找出所有四阶自然数幻方啊!
谁有好办法找出所有四阶自然数幻方啊!还有,四阶的到底有什么个有人知道吧。。。急啊。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
这为阶
四阶
幻方
求解探讨
本文探讨了
四阶
幻方
的生成方法,通过不同策略降低计算复杂度,最终得出
四阶
幻方
总数为7040个。并尝试了五阶
幻方
的计算。
腾讯算法比赛
四阶
幻方
解决方案源码分析
本文围绕腾讯算法比赛中的
四阶
幻方
问题展开。介绍了
幻方
定义、4x4
幻方
构造规则及数学原理,分析了比赛背景、参赛作品和评分标准。阐述了回溯法、DFS、BFS等算法在
幻方
生成中的应用及数学优化技巧,还对满分源码“exile.cpp”进行解读,探讨算法优化和编程技巧提升。
幻方
(Magic Square)
本文介绍了
幻方
的基本概念,包括定义、起源(中国古代的《大戴礼》和“河图”、“洛书”),以及奇数阶和偶数阶
幻方
的构造方法,特别是罗伯法在奇阶
幻方
中的应用。,
判断
幻方
该程序接收用户输入的奇数阶矩阵,判断是否为
幻方
。
幻方
要求每行、每列和两条对角线上的元素和相等。输入矩阵维数和数据后,程序输出判断结果。
java实现—n阶奇数
幻方
本文介绍奇数阶
幻方
的构造方法,采用罗伯法,遵循特定口诀完成
幻方
构建。
幻方
是由1至n*n连续
自然数
组成的方阵,要求每行、每列及对角线数字之和相等。
数据结构与算法
33,026
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章