藍橋杯取球博弈

2021-07-29 23:01:47 字數 1075 閱讀 6917

題目

取球博弈

兩個人玩取球的遊戲。

一共有n個球,每人輪流取球,每次可取集合中的任何乙個數目。

如果無法繼續取球,則遊戲結束。

此時,持有奇數個球的一方獲勝。

如果兩人都是奇數,則為平局。

假設雙方都採用最聰明的取法,

第乙個取球的人一定能贏嗎?

試程式設計解決這個問題。

輸入格式:

第一行3個正整數n1 n2 n3,空格分開,表示每次可取的數目 (0

此題因為雙方都採用最聰明的取法,所以先觀察最聰明的取法:在保證能取得奇數的情況下,盡量取大數,

如果實在保證不了,直接取可取的最大數,雙方都這樣取,直到結束,比較取得總球數的奇偶性;

比如可取球數為1 2 3

總球數為5時  用a、b代表雙方:a->3,b->1,a->1結束,a輸;

總球數為8時  a->3,b->3,a->2結束,平局

總球數為9時 a->3,b->3,a->2,b->1,結束,a贏

**如下:

public static void main(string args) 

for (int i = 0; i < 5; i++)

for (int i = 0; i < 3; i++)

} }for (int i = 0; i < 5; i++)

if(b[j]>a[i]) continue;

x+=b[j];

a[i]-=b[j];

x1 = true;

break;

}if(!x1)

}for (int j = 2; j >= 0; j--)

if(b[j]>a[i]) continue;

y+=b[j];

a[i]-=b[j];

y1 = true;

break;

}if(!y1)

}} if(y==0)else if(y%2==0&&x%2!=0)else if(y%2!=0&&x%2==0)else if(y%2==0&&x%2==0)else

}}

歡迎指正~

藍橋杯 取球博弈

取球博弈 今盒子裡有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先取球,然後雙方交替取球,直到取完。被迫拿到最後乙個球的一...