找回密码
 注册
Simdroid-非首页
查看: 285|回复: 6

[数值计算] 每周一题“如图”

[复制链接]
发表于 2010-4-5 20:59:30 | 显示全部楼层 |阅读模式 来自 上海宝山区


“如图”所示,是个玩具。

请用Mathematica 代码找出答案。

游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2010-4-5 21:40:36 | 显示全部楼层 来自 湖南湘潭
Simdroid开发平台
15     1     2    12
     4    10     9     7
     8     6     5    11
     3    13    14     0
回复 不支持

使用道具 举报

发表于 2010-4-5 22:58:44 | 显示全部楼层 来自 台湾
本帖最后由 FreddyMusic 于 2010-4-7 12:42 编辑


  1. myrule1=x[i_,j_]:>ToExpression[ToString[x]<>If[i<=9,ToString[0]<>ToString[i],ToString[i]]<>If[j<=9,ToString[0]<>ToString[j],ToString[j]]];
  2. myrule2=x_[i_]:>ToExpression[ToString[x]<>If[i<=9,ToString[0]<>ToString[i],ToString[i]]];
  3. y[i_]:=Total@Table[j*x[i,j],{j,0,15}]/.myrule1;
  4. cond1=Flatten[{Thread[Flatten@{Total@Partition[Table[y[i],{i,0,15}],4],Total@Transpose@Partition[Table[y[i],{i,0,15}],4],y[0]+y[5]+y[10]+y[15],y[3]+y[6]+y[9]+y[12]}==Table[30,{10}]],Thread[Flatten@{Total@Table[x[i,j],{i,0,15},{j,0,15}],Total@Transpose@Table[x[i,j],{i,0,15},{j,0,15}]}==
  5. Table[1,{32}]]/.myrule1}];
  6. var=Flatten@Table[Table[x[i,j],{j,0,15}],{i,0,15}]/.myrule1;
  7. {b,m}=Normal[CoefficientArrays[cond1,var]];
  8. ans=LinearProgramming[Range[0,255],m,Table[{-b[[i]],0},{i,Length@b}],Table[0,{i,256}],Integers]
  9. Grid@Partition[Partition[ans,16].Range[0,15],4]

复制代码
{{12, 7, 8, 3}, {2, 13, 6, 9}, {5, 10, 1, 14}, {11, 0, 15, 4}}

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-4-5 23:41:26 | 显示全部楼层 来自 北京
代码我先想着,先附上史上最优秀的四阶幻方,各项减去一即可满足上面的要求.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2010-4-6 21:13:46 | 显示全部楼层 来自 重庆沙坪坝区
哇塞  太神了  15     1     2    12
     4    10     9     7
     8     6     5    11
     3    13    14     0
回复 不支持

使用道具 举报

 楼主| 发表于 2010-4-10 12:41:55 | 显示全部楼层 来自 上海
chungyuandye ,

方法不错,你的代码我看了,稍微改了改。

  1. myrule1=x[i_,j_]:>ToExpression[ToString[x]<>If[i<=9,ToString[0]<>ToString[i],ToString[i]]<>If[j<=9,ToString[0]<>ToString[j],ToString[j]]];
  2. y[i_]:=Total@Table[j*x[i,j],{j,0,15}]/.myrule1;
  3. cond1=Flatten[{Thread[Flatten@{Total@Partition[Table[y[i],{i,0,15}],4],Total@Transpose@Partition[Table[y[i],{i,0,15}],4],y[0]+y[5]+y[10]+y[15],y[3]+y[6]+y[9]+y[12]}==Table[30,{10}]],Thread[Flatten@{Total@Table[x[i,j],{i,0,15},{j,0,15}],Total@Transpose@Table[x[i,j],{i,0,15},{j,0,15}]}==Table[1,{32}]]/.myrule1}];
  4. var=Flatten@Table[Table[x[i,j],{j,0,15}],{i,0,15}]/.myrule1;
  5. {b,m}=Normal[CoefficientArrays[cond1,var]];
  6. ans=Quiet@LinearProgramming[Range[0,255],m,Table[{-b[[i]],0},{i,Length@b}],Table[0,{i,256}],Integers];
  7. Grid@Partition[Partition[ans,16].Range[0,15],4]
复制代码
能否把所有的 Zero - Start Magic Square 都找出来 ?
回复 不支持

使用道具 举报

 楼主| 发表于 2010-4-11 07:50:52 | 显示全部楼层 来自 上海
本帖最后由 FreddyMusic 于 2010-4-11 07:54 编辑

我想了想,Zero - Start Magic Square 就是 One-Start Magic Square (Standard),
区别仅在于 每个数字都减去 1 ,而它们每行每列的和任然相等。

换言之,知道如何生成所有的Magic Square 那就可以生成 Zero - Start Magic Square ,
它们的方法是一样的。那么剩下的问题就是幻方 Magic Square 应该如何生成。

顶楼照片上积木从0开始,可能是玩具公司对经典数学游戏了解有限,想当然地从0开始了。
如果他们也能多懂点数学娱乐,我想他们也会选择从1 开始的。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2026-1-7 03:50 , Processed in 0.032933 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表