Python|猜球博弈

歡迎點擊「算法與編程之美」↑關注我們!

本文首發於微信公衆號:"算法與編程之美",歡迎關注,及時瞭解更多此係列文章。

歡迎加入團隊圈子!與作者面對面!直接點擊!

問題描述

取球博弈

今盒子裏有n個小球,A、B兩人輪流從盒中取球,每個人都可以看到另一個人取了多少個,也可以看到盒中還剩下多少個,並且兩人都很聰明,不會做出錯誤的判斷。

我們約定:

每個人從盒子中取出的球的數目必須是:1,3,7,8。

輪到某一方取球時不能棄權!

A先取球,然後雙方交替取球,直到取完。

被迫拿到最後一個球的一方爲負方(輸方)

請編程確定出在雙方都不判斷失誤的情況下,對於特定的初始球數,A是否能贏?

程序運行時,從標準輸入獲得數據,其格式如下:

先是一個整數n(n<100),表示接下來有n個整數。然後是n個整數,每個佔一行(整數<10000),表示初始球數。

程序則輸出n行,表示A的輸贏情況(輸爲0,贏爲1)。

例如,用戶輸入:

10

18

則程序應該輸出:

0

1

1

0

解決方案

注意‘兩人都很聰明,不會做出錯誤的判斷’這段話。

意思是當A和B面臨選擇時,如果他們的選擇能使對方輸(不管對方怎麼選擇,結果都是輸),那麼他們就一定會這樣選擇。

所以,這可能就是一個找規律的題型,在一定範圍內具有某種規律,之後不停地重複這種規律。因爲球數多了 A先選就會把情況變成之前的某一種情況。

我們試一試:

次數輸贏(輸 0  贏 1)

1   0

2   1

3   0

4  1

5   0

6   1

7   0

8   1

9   1

10  1

11  1

12  1

13  1

14  1

15  1

16  0

17  1

18  0

19  1

不難看出這是以15爲一個循環的,1到8是輸贏交替,9到15都是贏。接下來寫代碼便容易了很多。

編寫代碼:

n = int(input('多少個開始球數的情況:'))

l = list(i for i in range(n))

for i in range(n):

    l[i] = int(input())

def qiuqiu(m):

    mm = m % 15

    if mm > 7: print(1)

    else:

        if mm % 2 == 0: print(1)

        else: print(0)

for i in l:

    qiuqiu(i

END

實習編輯   |   王文星

責       編   |   周茂林

 where2go 團隊


   

微信號:算法與編程之美          

長按識別二維碼關注我們!

溫馨提示:點擊頁面右下角“寫留言”發表評論,期待您的參與!期待您的轉發!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章