这九个数字组成一个分数,其值恰好为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