用Java中的置换法解方程
对于给定的问题,我被赋予两个数字,它们将以这种方式求和到某个结果:用Java中的置换法解方程,java,permutation,equation,backtracking,brute-force,Java,Permutation,Equation,Backtracking,Brute Force,对于给定的问题,我被赋予两个数字,它们将以这种方式求和到某个结果: num1 + num2 = result 然而,这些数字将被“编码”,因此,例如,输入可能是: ab + bc = acd 数字的长度可以是9位数 我的任务是创建一个有效的方法,找出每个输入有多少可能的解决方案,或者是否不可能 我通过创建一个名为Number(java中)的类来解决这个问题,该类有一个字母(char类型)和一个数值(int),然后我将每个数字转换为这个新类号的数组,这样我就可以轻松地检查它们的当前值 然而,我
num1 + num2 = result
然而,这些数字将被“编码”,因此,例如,输入可能是:
ab + bc = acd
数字的长度可以是9位数
我的任务是创建一个有效的方法,找出每个输入有多少可能的解决方案,或者是否不可能
我通过创建一个名为Number(java中)的类来解决这个问题,该类有一个字母(char类型)和一个数值(int),然后我将每个数字转换为这个新类号的数组,这样我就可以轻松地检查它们的当前值
然而,我不太确定如何处理这个回溯问题
我知道,我应该开始比较数字1和数字2的单位,然后是十,等等,在每个“级别”中,只选择总和符合逻辑的情况,因此,例如,在上面的例子中,对于单位b=2和c=3,只有当d=5时才有意义,我可以放弃d!=3的所有其他情况5表示这两个先前存在的值
有人告诉我,仅使用两个循环就可以覆盖所有这些排列:一个循环遍历可能的数字[0到9],另一个循环覆盖所有字母/变量,但我不太明白如何做到这一点
如果让我想象的话,我想我可以把它想象成
for cycle ( through "columns" from the rightmost up to the leftmost column of the shortest number)
for cycle( for numbers 0 to 9?)
但是我仍然无法理解这个主题的方法,或者我如何用递归来解决这个问题,我非常感谢所有有助于提高我理解的方法。这里有一个算法应该可以工作 让我们以你的等式为例:
ab + bc = acd
int
。长的就行了
列表中
列表
值或完成迭代后未找到解决方案
你的投入是什么?你的产出是多少?你的问题不清楚。你说一个数字可以是9位数,是不是意味着
a
可以是1236548
??或者一个字母等于一个数字?@majid hajibaba:每个字母都是一个数字。一个等式的每个操作数或和最多可以有九个字母。对于OP:我在过去使用蛮力来解决这类问题,因为方程最多可以有10个不同的字母代表0-9,最多27个字母(三个10^9整数)。带有微小数字的嵌套循环速度很快。