思路:
通過暴力方法破解(即全排列)
利用字尾表示式來去除括號的麻煩
對零這個特殊數字的處理
再字尾轉中綴表示式
# 輸入4個[1~13]之間的數字
definput()
:while
true
:try
: a, b, c, d =
map(
int,
input
("請輸入[1~13]之間的四個數字(空格分開):"
).split())
for i in
[a, b, c, d]
:if i<
1or i>13:
raise valueerror(
"所輸入的數字必須在[1~13]之間"
)break
except exception as result:
print
("引發異常:"
, result)
return
[a, b, c, d]
# 尋找所有符號的排列組合,所得結果是乙個常量列表
defqueue_list
(li_str)
: queue =
['+'
,'-'
,'*'
,'/'
] ans =
while queue:
string = queue.pop(0)
iflen
(string)==3
:continue
for i in li_str:
return ans
# 利用回溯尋找出所有數字的排列組合
fuhao = queue_list(
['+'
,'-'
,'*'
,'/'])
defhuisu
(num, li, result):if
len(li)==4
:global fuhao
for each in fuhao:
for ans in func(li, each)
: ans = check(ans)
# print("答案是:", ans)
for i in
range
(len
(num)):
n = num.pop(i)
huisu(num, li+
[n], result)
num.insert(i, n)
return result
# 對數字和符號進行排列組合,只用5種排列組合,直接列舉
defcollect
(n, f)
: ans =
[n[0
], n[1]
, f[0]
, n[2]
, f[1]
, n[3]
, f[2]
])[n[0
], n[1]
, f[0]
, n[2]
, n[3]
, f[1]
, f[2]
])0:
3]+list
(f[0:2
])+[n[3]
]+[f[2]]
)0:3
]+[f[0]]
+[n[3]
]+list
(f[1:]
))list
(f))
return ans
deffunc
(nums, fuhao)
: res =
li_all = collect(nums, fuhao)
for each in li_all:
ans = kernel(each)if-
1-ans)
*1000
<1:
return res
# 核心**
defkernel
(li)
: stack =
for i in li:
iftype
(i)==
type
('string'):
b = stack.pop(
) a = stack.pop(
)if i==
'+':
elif i==
'-':
elif i==
'*':
else
:if b==0:
return
0else
:return stack[0]
# 字尾轉中綴
defcheck
(li)
: stack =
for i in li:
iftype
(i)==
type
('string'
)and
len(i)==1
: b =
str(stack.pop())
a =str(stack.pop())
temp = f'()'
else
:return stack[0]
[1:-
1]defmain()
: num = input(
) result = huisu(num,
,)for ans in
list
(set
(result)):
print
("答案是:"
Python實現24點遊戲
24點遊戲是經典的紙牌益智遊戲。我的思路是把這4個數分成2部分,前兩個數一起,後兩個數一起,先計算除前兩個數所有可能的結果和後兩個數所有可能的結果。最後將它們的結果互相計算,結果與24比較,如果等於24則成功。建立使用者類,整個遊戲的體系就是建立乙個使用者類來儲存使用者的資訊,如姓名,生命值,分數等...
24點遊戲演算法
24點遊戲演算法 現在我們在做乙個 24點的小遊戲,我主要負責演算法部分,前面有章部落格已經講解了加括號的四則表示式的計算演算法,現在要解決就是24點的演算法。54張牌去掉大小王 2張牌,剩餘 52張。任意發1 k之間的4個 張牌 也就是有 1 13 的四個數字 用 鏈結成算式,使得式子的計算結果為...
24點遊戲設計
24點遊戲設計 問題描述 在數字1 13中隨機生成4個數字,運用加減乘除四則使4個數字的執行結果為24,每個數字僅能使用一次。演算法設計 實現24點運算有如下兩種演算法。演算法一窮舉法。所謂窮舉法就是列出4個數字加減乘除的各種可能性。我們可以將表示式分成以下幾種 首先我們將4個數設為a,b,c,d,...