一道另人头疼的算法竞赛练习题
实际项目做了不少,但很多算法却不会了。最近在翻看一本算法书,其中有一题把我给难住了,理不清思路。
题:
从 1, 2, 3 ... , 9 中选择数字构成三个 3 位数 abc, def, ghi,各不重复,但要满足 abc:def:ghi = 1:2:3。请打印出每个符合条件的结果。
我的两种思路:
1. 将 abc 从 123 循环到 329(333 * 3 = 999,三位数已到头,且 [330, 333] 之间已无符合条件的数,故直接去除)。然后检查 abc、def、ghi 构成的数字是否不重复。
2. 1 - 9 的全排列,并将对应的数字赋给 a - i,然后再测试 abc:def:ghi 是否满足 1:2:3
虽然理论上这两种都可行,且最终都能得到答案。但我总觉得这两种算法很丑,完全无美感可言~ 故求一足够简单且优雅的算法。谢谢!