A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

qq270628297

中级黑马

  • 黑马币:21

  • 帖子:20

  • 精华:0

© qq270628297 中级黑马   /  2016-8-1 21:08  /  1068 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

将1-16填入16宫格中.
        0  1  2  3
        4  5  6  7
        8  9  10 11
        12 13 15 16
* 要求:各行,各列,对角线之和都相等.
在控制台输出宫格表

5 个回复

倒序浏览
遍历的复杂度 = 16! = 20922789888000
所以说肯定不能用遍历算法了。。。
回复 使用道具 举报
遍历法,3 * 3 尚可,4 * 4 太费时了,根本就跑不完。。。
  1. 2 7 6
  2. 9 5 1
  3. 4 3 8

  4. 2 9 4
  5. 7 5 3
  6. 6 1 8

  7. 4 3 8
  8. 9 5 1
  9. 2 7 6

  10. 4 9 2
  11. 3 5 7
  12. 8 1 6

  13. 6 1 8
  14. 7 5 3
  15. 2 9 4

  16. 6 7 2
  17. 1 5 9
  18. 8 3 4

  19. 8 3 4
  20. 1 5 9
  21. 6 7 2

  22. 8 1 6
  23. 3 5 7
  24. 4 9 2

  25. [00:00:00] [DEBUG]: [8, 44.616963000000005ms]
复制代码
回复 使用道具 举报
本帖最后由 cat73 于 2016-8-1 23:08 编辑

仔细考虑了下,其实有规律可循,每一个输出的行、列、对角线的总和其实都是一样的。
其规律为,按从小到大的顺序从左到右从上到下分布所有数字,然后求其对角线的总和。
这个数字就是后续有效输出中行、列、对角线的总和。
而且其实这些输出中数字的组合也是无需遍历即可预知的。
可以说解数 = N * 2 + 2(N 为长度与高度)
  1. 1 2 3
  2. 4 5 6
  3. 7 8 9

  4. 1 5 9
  5. 1 6 8
  6. 2 4 9
  7. 2 5 8
  8. 2 6 7
  9. 3 4 8
  10. 3 5 7
  11. 4 5 6
复制代码


回复 使用道具 举报
似乎我发现的规律也不太对,算了,留个 TODO 以后再看吧。。。
回复 使用道具 举报
cat73 发表于 2016-8-1 22:31
遍历法,3 * 3 尚可,4 * 4 太费时了,根本就跑不完。。。

求代码,3*3的代码怎么写出来的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马