1,2,3..9这九个数字组成一个分数,其值恰好为3分之1,如何组法? - sbw Blog

1,2,3..9这九个数字组成一个分数,其值恰好为3分之1,如何组法?

来源: 石博文博客 | 浏览: 6333 | 评论: 10 发表时间: 2016-03-02

这九个数字组成一个分数,其值恰好为1/3,如何组法?这是一个第一眼看上去非常简单的问题,但编程起来还是需要一点点技巧的。



Rust 语言解法

几个技巧点: 1. 循环从 100 到 10000,因为 9 个数要平分两组且为 3 倍的关系,考虑到如果一个 4 位数的最小 1000 * 3 为一个 4 位数, 4 位数的最大值 9999 * 3 为 5 位数,同理, 5 位数的最小、最大为 5 位 或 6 位数,所以可以肯定其中一个数必然是 4 位或 5 位数,这样就大大减少了循环时间


2. 利用一个 flags 矩阵保存已经选过的数字,将两个数字依次检查每一位是否已经使用过。


3. 遍历较小数,另一个数使用 a * 3, 而不是遍历较大数,另一个用 a / 3, 这样的考虑并不是为了优化时间,而是比如 2 * 3 = 6, 而 7 / 3 = 2, 即 7 / 2 == 6 / 2




相关文章
  • 声明: 评论属于其发表者所有,不代表本站的观点和立场.
  • 软件开发 回复该留言 时间: 2016-05-10

    谢谢分享。

  • 路人yang** 回复该留言 时间: 2017-05-26

    你用了 9900 次循环。 单考虑 3 或 9 的倍数,各位数字之和也是 3 或 9 的倍数这条规则。 仅心算就能把 4 位数限定到 649 次循环。 事实上,昨晚看到题目后草稿纸上简单写了一下, 化简到 235 次循环了,(这里写不下,而且代码略微复杂了,略)。 我[b]猜测[/b]单靠手算在 30 min 内可以算出全部答案(等有空我试下)。

  • 石博文 回复该留言 时间: 2017-05-27

    有意思!这个方向当时没考虑过。

  • 路人甲 回复该留言 时间: 2019-03-27

    这个应该还可以继续优化!

  • 石博文 回复该留言 时间: 2019-03-27

    可以参考上面的回复。

已有 5 位网友发表了一针见血的评论,你还等什么?
  • 昵称: *
  • 邮箱:
  • 网址:
  • 记住我的信息
  • Color
  • Red
  • Blue
  • Code
  • bash
  • cpp
  • css
  • java
  • js
  • perl
  • php
  • python
  • ruby
  • sql
  • xml