藍橋杯歷屆試題 取球遊戲

2021-10-01 18:12:58 字數 1098 閱讀 8963

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

我們約定:   

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

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

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

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

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

程式執行時,從標準輸入獲得資料,其格式如下:

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

程式則輸出n行,表示a的輸贏情況(輸為0,贏為1)。

例如,使用者輸入:

則程式應該輸出:

注意:請仔細除錯!您的程式只有能執行出正確結果的時候才有機會得分!

在評卷時使用的輸入資料與試卷中給出的例項資料可能是不同的。

請把所有函式寫在同乙個檔案中,除錯好後,存入與【考生資料夾】下對應題號的「解答.txt」中即可。

相關的工程檔案不要拷入。   

源**中不能能使用諸如繪圖、win32api、中斷呼叫、硬體操作或與作業系統相關的api。   

允許使用stl類庫,但不能使用mfc或atl等非ansi c++標準的類庫。例如,不能使用cstring型別(屬於mfc類庫)。

分析:當n=1的時候,a一定會輸;

當n=1+[1,3,7,8]的時候,a一定會贏,因為a可以取1,3,7,8對應的那個數,然後把1留給b;

也就是說,當n的值是乙個必輸的情況加1,3,7,8的時候,則a可以取到對應的值,而把必輸情況交給b。

我們根據這條規律,把n的所有取值1~10000都進行標記為1(必勝)或者0(必輸),然後對輸出對應的標記即可。

1 #include2 #include

3int a[10000];4

void f(inta)5

;7for(int i=1;i<10000;i++)815

}16}17

}18intmain()

1933

return0;

34 }

藍橋杯試題 取球遊戲

今盒子裡有 n個小球,a b兩人輪流從盒中取球,每個人都可以看到另乙個人取了多少個,也可以看到盒中還剩下多少個,並且兩人都很聰明,不會做出錯誤的判斷。我們約定 每個人從盒子中取出的球的數目必須是 1,3,7或者 8個。輪到某一方取球時不能棄權!a 先取球,然後雙方交替取球,直到取完。被迫拿到最後乙個...

藍橋杯 取球遊戲

今盒子裡有n個小球,a b兩人輪流從盒中取球,每個人都可以看到另乙個人取了多少個,也可以看到盒中還剩下多少個,並且兩人都很聰明,不會做出錯誤的判斷。我們約定 每個人從盒子中取出的球的數目必須是 1,3,7或者8個。輪到某一方取球時不能棄權!a先取球,然後雙方交替取球,直到取完。被迫拿到最後乙個球的一...

2012藍橋杯 初賽試題 取球遊戲

問題描述 今盒子裡有n個小球,a b兩人輪流從盒中取球,每個人都可以看到另乙個人取了多少個,也可以看到盒中還剩下多少個,並且兩人都很聰明,不會做出錯誤的判斷。我們約定 每個人從盒子中取出的球的數目必須是 1,3,7或者8個。輪到某一方取球時不能棄權!a先取球,然後雙方交替取球,直到取完。被迫拿到最後...