問題提出:
規則: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 將會被送到教堂,這是神的旨意。請問,最聰明的豬應該站在哪個位置,才能成為這個幸運兒?解題思路 分析這個問題,我們發現,奇數字是危險的,每一...