使用特定的一组值获得给定答案的数字方程



我为AI作业做了这个。需要一个寻找解决方案的逻辑…这是对问题的解释。

我有答案(任何数字,例如10)。并且有一些数字集合(例如[1,2,3,4,5,6,8,9])。现在我必须使用(+,-,*,/)和数字创建方程以得到答案10。

这是第一步(不是固定长度或重复数字的条件)。有许多解决方案,如

5 + 5 = 10(2步)2 * 2 = 10(2步)

2 * 2 + 6 = 10(3步)3 * 2 + 4 = 10(3步)…和

第二步(更难)(下一个作业)是必须设置一些条件,如——>必须在特定的步骤中…或者-->必须不重复数字两次(如果在这里数组中两次乘以5,那么我们可以使用它两次)——>必须使用两次*

我不是人工智能专家,但任何有帮助的链接也欢迎

第一部分的一个相当简单的解决方案如下:假设所有的数字都是有理数。然后继续在当前结果集上执行允许的操作,直到达到目标。毫无疑问,有许多方法可以改进算法,但这应该是您的入门。

下面是一个类似python的伪代码,用于第一部分的简单解决方案。

def solve(numbers, target, binary_operators):
    obtainable_results = set(numbers)
    if target in obtainable_results:
        return True
    while True:
        prev_len = len(obtainable_results)
        for a in obtainable_results:
            for b in obtainable_results:
                for op in binary_operators:
                    c = op(a, b)
                    if c == target:
                        return True
                    obtainable_results.insert(c)
        if prev_len == len(obtainable_results):
             return False

请注意,不能立即清楚此操作是否会在每次输入时终止。你能提供这样一个输入的例子,或者证明它确实在所有输入上都终止吗?我们如何改进它?

对于第二部分,您还需要维护一组允许的条件及其当前状态。如果没有那么多条件,并且它们遵循简单而相似的模式,那么您可能希望手动执行此操作,但是如果它们很多并且容易更改,那么您可能更希望为每个结果的每个条件维护一组状态机。

最新更新