❤️震惊!人生苦短,我用python来玩田忌赛马❤️
一讀標題笑死自己哈哈哈,最近豬哥(玩得敲好的彭友)找我幫忙解決他不會作業哈哈哈,他們公司自己出的筆試題哈哈哈,希望別被他們出題人看見哈哈哈,回想豬哥說的一句話,萬一這就是以后你遇到的試題呢哈哈哈。突然發現自己已經小半年沒玩Python了,一上手手都生了,還真是那句話,三天不摸手生了都。
https://blog.csdn.net/hanhanwanghaha寶藏女孩 歡迎您的關注!
歡迎關注微信公眾號:寶藏女孩的成長日記
讓這個可愛的寶藏女孩在努力的道路上與你一起同行!
如有轉載,請注明出處(如不注明,盜者必究)
關于田忌賽馬的拙見
- 使用 python 函數實現田忌賽馬
- 要求一
- 要求二
- 要求三
使用 python 函數實現田忌賽馬
要求一
現在我們
將田忌的馬抽象為一個列表 [2,5,8],
齊王的馬抽象為另一個列表 [3,6,9],
分別代表各自的下、中、上等馬(我自己讀到這里就記住值越大,馬越好,這樣理解就不會錯了)。
設計一個函數 race(),將兩個列表作為參數傳遞給race(),將策略抽象為代碼使田忌贏得比賽,函數返回每輪對陣情況:
上代碼
要求二
現在將馬分為 劣 、下、中、上、優五等,五局三勝制,抽象為列表[2,4,6,8,10] 與 [1,3,5,7,9] ,其他條件不變(齊王仍然準守規則,田忌繼續不按照套路出牌),計算出田忌有多少種贏得比賽的可能
上代碼
要求三
如果你是齊王,已知同級別中己方的馬優于田忌的馬,事先不知道對方派遣順序,不過可以根據上一輪對方的派出的馬匹制定本輪的選擇。制定一種派遣策略,使贏得比賽的幾率最大。
第三題我是真不知道咋做了(想這個腦子都長草了!這是親爺熬夜給我想出來的,可能不是最優,需要點聰明腦子,如果有更好的想法可以私信我,歡迎討論)
解題思路:
田忌以劣勝優的策略在于輸的時候輸的比較多,但是贏的時候只是微弱優勢贏
如 10-1 8-9 6-7 4-5 2-3 (齊王1:田雞4)
那想讓齊王盡可能獲勝的辦法就是拉開這個「微弱優勢」
方法
齊王第一次排出2的
往后每次分兩種情況,
1.田忌贏了,那我們就可以拿出上輪田忌的x-1的參加下一輪。
2.田忌輸了,可以繼續拿當前最小的出來。
如果x-1的沒了,就出最差的那匹,如此循環
這種方法仍然會失敗 如田忌按照3 5 7 9 1這樣出
上代碼
# coding=utf-8from itertools import permutations from typing import *tian = [1, 3, 5, 7, 9] qi = [2, 4, 6, 8, 10]def play() -> float:global qiwin_count = 0cnt = 0for a, b, c, d, e in permutations(tian, 5):qi = [2, 4, 6, 8, 10] # 復原cnt += 1tian_rank = [a, b, c, d, e]qi_rank = [qi.pop(0)] # 初始化for index, last_tian in enumerate(tian_rank[:4]):qi_rank.append(strategy(last_tian, qi_rank[index] > tian_rank[index])) # 每次根據上一次tian的和輸贏制定策略# 根據兩個rank算輸贏win_count += winner(qi_rank, tian_rank)# 返回概率return float(win_count) / float(cnt)def strategy(last_tian: int, is_win: bool) -> int:global qi# 如果齊王上輪贏了,繼續拿最小的出來if is_win:return qi.pop(0)# 如果齊王上輪輸了else:# 如果x-1的存在,就拿出來if last_tian - 1 in qi:return qi.pop(qi.index(last_tian - 1))# 否則還是拿最小的else:return qi.pop(0)def winner(qi: List[int], tian: List[int]) -> bool:cnt = 0for q, t in zip(qi, tian):cnt += q > treturn cnt >= 3if __name__ == '__main__':print(play())這樣算出來的概率是0.075,
感覺前面兩個算法題加油扣腦殼是可以湊合寫出來的,第三個是真難度(當然對于大佬來說小事一樁)
https://blog.csdn.net/hanhanwanghaha寶藏女孩 歡迎您的關注!
歡迎關注微信公眾號:寶藏女孩的成長日記
讓這個可愛的寶藏女孩在努力的道路上與你一起同行!
如有轉載,請注明出處(如不注明,盜者必究)
總結
以上是生活随笔為你收集整理的❤️震惊!人生苦短,我用python来玩田忌赛马❤️的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Vo. 1 No. 1] 高等代数一题
- 下一篇: Pycharm如何导入python文件,