找回密码
 欢迎注册
楼主: chyanog

[擂台] 六边形幻方

[复制链接]
发表于 2013-4-16 17:16:16 | 显示全部楼层
2 4 6 7 1 5 3 9 8 0 8 9 3 5 1 7 6 4 2
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-4-16 18:20:50 | 显示全部楼层
7# hujunhua k解出来了,k==38
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-4-16 19:20:14 | 显示全部楼层
用Mathematica会内存不够,用C写了个
  1. #include <stdio.h>
  2. #include <time.h>
  3. int main(int argc, char *argv[])
  4. {
  5. clock_t t0=clock();
  6. int a,b,c,d,e,f,g;
  7. int k=19;
  8. for (a=1;a<=k;a++)
  9. for (b=1;b<=k;b++)
  10. for (c=1;c<=k;c++)
  11. for (d=1;d<=k;d++)
  12. for (e=1;e<=k;e++)
  13. for (f=1;f<=k;f++)
  14. for (g=1;g<=k;g++)
  15. {
  16. int A[19];
  17. A[0] = a;
  18. A[1] = b;
  19. A[2] = 38 - a - b;
  20. A[3] = c;
  21. A[4] = d;
  22. A[5] = e;
  23. A[6] = 38 - c - d - e;
  24. A[7] = 38 - a - c;
  25. A[8] = f;
  26. A[9] = g;
  27. A[10] = 38 - b - d - e - f - g;
  28. A[11] = -38 + a + b + c + d + e;
  29. A[12] = 38 - b - d - f;
  30. A[13] = 38 - c - d - e - f - g;
  31. A[14] = -38 + b + c + d + e + f;
  32. A[15] = d + f + g;
  33. A[16] = -38 + a + b + c + d + f;
  34. A[17] = d + e + g;
  35. A[18] = 76 - a - b - c - 2*d - e - f - g;
  36. int i, j;
  37. int flag1=1;
  38. for (i=0;i<k;i++)
  39. {
  40. if (!(A[i]>0))
  41. {
  42. flag1=0;
  43. break;
  44. }
  45. }
  46. if (!flag1)
  47. break;
  48. int flag2=1;
  49. for (i=0; i<k;i++)
  50. {
  51. for (j=1; j<k-i;j++)
  52. {
  53. if (A[i]==A[j+i])
  54. {
  55. flag2=0;
  56. break;
  57. }
  58. }
  59. }
  60. if (flag2)
  61. {
  62. for (i=0;i<k;i++)
  63. printf("%d ", A[i]);
  64. printf("\n");
  65. }
  66. }
  67. printf ("Elapsed %0.2f\n", (clock()-t0)/1000.0);
  68. getchar();
  69. return 0;
  70. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-4-16 20:51:20 | 显示全部楼层
本质上就是 一个 16*19的常数矩阵C,乘以19*1的列向量X,得到一个16*1的列向量A=k*{1,1,1,1,1,....,1,5} 其中,5k=19*20/2------------------------------> 也即是 k=38
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-4-16 22:26:41 | 显示全部楼层
5# hujunhua Binomial[19, 6]=27132 , 也就是说总共只需要循环27132 次,每一次解13*13的线性方程,这个规模其实很小,基本上不费时间的。 老大说的超过“机器数”是啥意思?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-4-16 22:35:07 | 显示全部楼层
15# wayne 我觉得是可能是生成的list太大,Mathematica报内存溢出了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-4-16 22:43:53 | 显示全部楼层
5# hujunhua
(x1,x2,x3,x4,x5,x6),(i=7~19)取自6个无约束关系的格。
这6个格子代表6个自由度,选择这样的格子还是比较难的。 该不会是2,4,13,18,16,7 吧
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-4-16 23:00:11 | 显示全部楼层
  1. b1={{1,2,3},{4,5,6,7},{8,9,10,11,12},{13,14,15,16},{17,18,19}};
  2. b2={{1,4,8},{2,5,9,13},{3,6,10,14,17},{7,11,15,18},{12,16,19}};
  3. b3={{3,7,12},{2,6,11,16},{1,5,10,15,19},{4,9,14,18},{8,13,17}};
  4. cc=Table[t=Array[0&,19];Map[Set[Part[t,#],1]&,iii];t,{iii,Flatten[{b1,b2,b3},1]}];
  5. cc=Join[cc,{Array[1&,19]}]
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2013-4-17 00:18:48 | 显示全部楼层
18# wayne 第4行可以更简洁一点,
  1. 1 - Sign[(Range[19] /. Thread[# -> 0]) & /@ Join[b1, b2, b3]]
  2. ReplacePart[0 Range[19], List /@ # -> 1] & /@ Join[b1, b2, b3]
  3. Normal[SparseArray[Thread[# -> 1], 19] & /@ Join[b1, b2, b3]]
复制代码

评分

参与人数 1鲜花 +12 收起 理由
wayne + 12 不错!:)

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-4-17 02:16:31 | 显示全部楼层

八维通解

本帖最后由 hujunhua 于 2013-4-17 10:03 编辑 18#生成的矩阵轶=12,故参数解是8维的(总和也作为一个变量),一个优化的参数解如下(优化标准是旋转对称度和各表达式的简明性): s+a+c O+b+C S+A+B O+A+b B c O+a+C S+B+C a O A s+b+c O+A+c C b O+a+B s+a+b O+B+c S+A+C 看起来有九个参数,但有约束 s+S=O,所以实际上是 8 参数解。 从2#的结果看,S=O,s=0,所以一个高度对称、简明的六参数解(总和给定)为 a+c O+b+C O+A+B O+A+b B c O+a+C O+B+C a O A b+c O+A+c C b O+a+B a+b O+B+c O+A+C 2#的数据中,1+10=2+9=3+8,这3个“等和对”处于旋转对称位置,15+7=16+6=18+4,这3个“等和对”处于旋转对称位置,这都不是偶然的,因在参数解中有完全体现。

评分

参与人数 1贡献 +12 鲜花 +12 收起 理由
wayne + 12 + 12 漂亮!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-21 21:25 , Processed in 0.036904 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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