數學回味系列之20 常勝將軍

2021-07-27 11:51:55 字數 914 閱讀 4173

問題提出:

規則:a b 兩人玩取火柴的遊戲,共有 21 根火柴。

每人每次最多取 4 根,最少取 1 根。取到最後一根火柴的玩家算輸。

如何保證某一玩家每次都贏?

解題思路:

常勝將軍 是 取火柴遊戲 的乙個特例。

如果每次都想讓其中乙個玩家贏(假設為b),那麼b 要保證最後一輪剩餘6根,這樣不管a怎麼取 都會輸。

再往前推,如果上一輪 剩餘 5+6 個,那麼不管a怎麼取,b可以取 5-a 個。

再進一步,想要占得先機,第一輪就要保證 剩餘 5*k + 1 個,第一輪是關鍵(下手要狠吶)!

/* linolzhang 2009.12

match game

*/#include #include #include int main()

printf("你取:"); // a

a = _getch() - 48;

if(a<1 || a>4 || a>n)

n -= a;

printf("%d 根 --> 剩餘:%d根\n", a,n);

if(n == 1) // b

b = (n % 5 + 4) % 5; // 爭取剩餘 5*k + 1

if(b == 0)

b = rand() % 4 + 1; // 被算計了,隨便給乙個

n -= b;

printf(" b取:%d 根 --> 剩餘:%d根\n\n", b, n);

} getchar();

return 0;

}

數學趣題 常勝將軍

21根火柴,a和b每人每次可以取走1 4根,不可多取,也不可不取,取最後一根火柴者輸,要求a先取,b後取。如何保證b永遠是勝利者。即必須是b最後只留給a 1根火柴。也就是除了最後第21根火柴,之前的每一輪都必須保證a和b取到的火車數之和為5。include 2 3 int main 4 16 17 ...

數學回味系列之3 賽馬問題

問題提出 共有25匹馬,有乙個賽場,賽場有5個賽道,就是說最多同時可以有5匹馬一起比賽。假設每匹馬都跑的很穩定 可多次比賽 只通過馬與馬之間的比賽,沒有計時器,試問,最少需要多少場比賽才能知道跑得最快的3匹馬?解題思路 根據題目,我們首先想到的就是 1 隨機分成5組,各5匹馬,5場比賽得到 各組第1...

數學回味系列之13 殺豬問題

問題提出 有 n 頭豬 和 乙個 的屠夫 屠夫就喜歡殺單數字置上的豬,一次殺完之後,將剩下的豬按照原來的相對位置,重新排列 按照約定,最後一頭豬 取名lucky 將會被送到教堂,這是神的旨意。請問,最聰明的豬應該站在哪個位置,才能成為這個幸運兒?解題思路 分析這個問題,我們發現,奇數字是危險的,每一...