题目来源于老师布置的作业。有点数为1-9的卡牌各四张,现在要求从里面取出4张作为输入,然后通过加减乘除运算的得到24。比如1 1 4 7:
4*1=4
7-1=6
4*6=24
可能是我第一次接触到这种题,没有头绪,求助于chatGPT后做出来了,特此留念。
import numpy as np
def judge24(nums):
if len(nums) == 1:
return abs(nums[0] - 24)==0
for i in range(len(nums)):
for j in range(len(nums)):
if i != j:
next_nums = [nums[k] for k in range(len(nums)) if k != i and k != j] # 选取除i和j以外的数字
# 加法
next_nums.append(nums[i] + nums[j])
result=nums[i]+nums[j]
if nums[i]>nums[j]:
records.append((nums[i],'+',nums[j],'=',result))
else:
records.append((nums[j], '+', nums[i], '=', result))
if judge24(next_nums):
return True
next_nums.pop()
records.pop()
# 乘法
next_nums.append(nums[i] * nums[j])
result = nums[i] * nums[j]
if nums[i] > nums[j]:
records.append((nums[i], '*', nums[j], '=', result))
else:
records.append((nums[j], '*', nums[i], '=', result))
if judge24(next_nums):
return True
next_nums.pop()
records.pop()
# 减法
next_nums.append(nums[i] - nums[j])
result = nums[i] - nums[j]
if nums[i] > nums[j]:
records.append((nums[i], '-', nums[j], '=', result))
else:
records.append((nums[j], '-', nums[i], '=', result))
if judge24(next_nums):
return True
next_nums.pop()
records.pop()
# 除法,避免除数为0
if nums[j] != 0:
next_nums.append(nums[i] / nums[j])
result = nums[i] / nums[j]
if nums[i] > nums[j]:
records.append((nums[i], '/', nums[j], '=', result))
else:
records.append((nums[j], '/', nums[i], '=', result))
if judge24(next_nums):
return True
next_nums.pop()
records.pop()
return False
a=np.zeros(4,int)
testlist=input()
testlist=testlist.replace(' ','')
records=[]
for i in range(len(testlist)):
a[i]=testlist[i]
result = judge24(a)
if result==True:
for record in records:
print(f"{record[0]}{record[1]}{record[2]}{record[3]}{record[4]}")
else:
print('No answer')