我正在计划一个 C++ 程序,它需要 3 个字符串来表示一个密码谜题。例如,给定 TWO、TWO 和 FOUR,程序将找到每个字母的数字替换,使得数学表达式
TWO
+ TWO
------
FOUR
是真的,假设输入是正确的。解决这个问题的一种方法当然是暴力破解,用嵌套循环为每个字母分配每个可能的替换,反复尝试求和等等,直到最终找到答案。
我的想法是,尽管这非常低效,但底层的循环检查可能是一种可行的(甚至是必要的)方法——在执行一系列推论以限制每个变量的域之后。我发现它有点难以想象,但首先假设这样的一般/填充结构是否合理(每个 X 代表一个不必要的不同数字,每个 C 是一个进位数字,在这种情况下,将是 0 还是 1)?:
CCC.....CCC
XXX.....XXXX
+ XXX.....XXXX
----------------
CXXX.....XXXX
考虑到这一点,还有一些规划思路:
- 尽管问题中不会给出前导零,但我可能应该在适当的地方添加足够的零,以使事情变得均匀/匹配操作数。
- 我想我应该从每个字母的一组可能的值 0-9 开始,可能作为向量存储在“域”表中,并在进行扣除时从中消除值。例如,如果我看到一些像这样排列的字母
A
C
--
A
,我可以说 C 为零,这消除了其域中的所有其他值。我可以想出不少推论,但将它们推广到各种小情况并放入代码中,乍一看似乎有点棘手。
-假设我有一系列很好的推论可以贯穿事物并从域表中引导出许多值,我想我仍然会遍历所有内容并希望状态空间足够小以合理地生成解决方案多少时间。但感觉必须有更多的东西!- 也许一些聪明的方程式要建立或类似的东西。
提示表示赞赏!