5588算24点怎么算式用三种方法(玩转24点:三种方法教你算式)

jk 629次浏览

最佳答案玩转24点:三种方法教你算式 24点是一种常见的纸牌游戏,需要通过四个给定的数字组合,用加、减、乘、除等运算符得出结果为24的算式。虽然看似简单,但是难度不小。下面将介绍三种...

玩转24点:三种方法教你算式

24点是一种常见的纸牌游戏,需要通过四个给定的数字组合,用加、减、乘、除等运算符得出结果为24的算式。虽然看似简单,但是难度不小。下面将介绍三种方法,帮助你一步步解决24点难题。

方法一:列举所有可能的运算符排列组合

这种方法最直接也最简单,只需要一个嵌套的循环即可。具体步骤如下:

1、将给定的四个数字两两之间加上加、减、乘、除四种运算符,可得出6种排列组合。

2、对于每种排列组合,再将其它两个数字分别带入计算,并记录计算结果。

3、对于所有可能的计算结果,判断是否有等于24的情况,若有,则输出相应的算式,结束程序。

此方法的代码如下:


for i in range(4):
    for j in range(4):
        if i != j:
            for k in range(4):
                if k != i and k != j:
                    l = 6 - i - j - k
                    for a in '+-*/':
                        for b in '+-*/':
                            for c in '+-*/':
                                result1 = eval(str(nums[i])+a+str(nums[j])+b+str(nums[k])+c+str(nums[l]))
                                if result1 == 24:
                                    print(str(nums[i])+a+str(nums[j])+b+str(nums[k])+c+str(nums[l]))
                                    return

方法二:递归枚举所有可能性

这种方法利用了递归的思想,将给定四个数字按不同的顺序排列,分别进行运算并记录结果。具体步骤如下:

1、将给定的四个数字分别与其它三个数字分别组合,得到12种不同的排列组合。

2、对于每种排列组合,分别将目标数字、已经处理的数字和尚未处理的数字传入递归函数中。

3、在递归函数中,先判断已经处理的数字是否为3,若为3,则判断结果是否等于24,若等于24,则输出相应的算式。

4、若已经处理的数字不为3,则分别进行加、减、乘、除等运算,得到新的目标数字和尚未处理的数字,再次调用递归函数计算。

此方法的代码如下:


def dfs(num, rest, index):
    if index == 3:
        if abs(num - 24) < 1e-6:
            print(rest)
            return True
        else:
            return False
    for i in range(len(nums)):
        if used[i] == False:
            used[i] = True
            if dfs(num+nums[i], rest+'+'+str(nums[i]), index+1):
                return True
            if dfs(num-nums[i], rest+'-'+str(nums[i]), index+1):
                return True
            if dfs(num*nums[i], rest+'*'+str(nums[i]), index+1):
                return True
            if nums[i] != 0 and dfs(num/nums[i], rest+'/'+str(nums[i]), index+1):
                return True
            used[i] = False
    return False
for i in range(len(nums)):
    used[i] = True
    if dfs(nums[i], str(nums[i]), 0):
        return
    used[i] = False

方法三:使用AI算法求解

这种方法则是使用了AI算法,采用强化学习方法,设计了一个深度神经网络,通过对大量数据进行训练,得出24点的算式。具体步骤如下:

1、将24点游戏数据分别转化为神经网络的输入和输出。

2、采用反向传播算法对网络进行训练,不断优化网络层的结构。

3、在网络的输出层,将得到24点的算式。

此方法需要使用深度学习框架,如TensorFlow,Keras等,代码如下:


from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD
model = Sequential([
    Dense(32, input_shape=(4,), activation='relu'),
    Dense(32, activation='relu'),
    Dense(24, activation='softmax')
])
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(optimizer=sgd, loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(x_train, y_train, epochs=50, batch_size=32)
result = model.predict(x_test)
for i in range(result.shape[0]):
    if result[i] == '24':
        print(x_test[i])
        break

综上所述,三种方法都可以用来解决24点问题,不同的是方法一和二更偏向操作,需较强的计算能力和分析思维,而方法三则更基于数学和计算机算法,需要一定的程序编写经验和机器学习知识。