有54張撲克牌,兩個人輪流拿牌,每人每次最少取1張,最多取4張,誰拿最後一張誰輸。編寫模擬計算機先拿牌且必勝的演算法。
分析:
為了保證計算機勝利,因此最後的牌必須是人取到,而且只能剩餘1張。通過觀察發現,除去最後一張牌,還剩餘53張牌。
除去第一次計算機取牌,之後的每次計算機如果要贏得遊戲,可以根據人取了多少張牌進行調整,以保證剩餘最後一張只能給人取到。
由於人與計算機的取牌數量侷限在[1,4],因此人機每次合計取牌可控制為(1+4)=5張。
因此計算機取牌為了保證勝利,n1=(54-1)%5(求餘)
之後,計算機根據人出了多少牌進行調整,保證每次人機取牌總數為5。
即:人取1張,計算機取4張
人取2張,計算機取3張
人取3張,計算機取2張
人取4張,計算機取1張
這樣可以保證計算機先拿牌且必勝。
//取牌必勝演算法//
#includeint main()
printf("您取了%d張牌\n",num);
total=total-num;
printf("現在還剩下%d張牌\n",total);
if(total==0) //判斷張數是否為0,如果是則可以跳出迴圈,結束取牌
佇列及其應用 取牌遊戲
一 基本概念 佇列是一種操作受到限制的特殊線性表。其插入操作限定在表的一端進行,稱為 入隊 其刪除操作則限定在表的另一端進行,稱為 出隊 插入一端稱為隊尾 rear 刪除一端稱為隊頭 front 佇列也被稱作 先進先出 線性表 fifo,first in first out 類似於生活中排隊購票,先...
NEFUOJ P1633取牌遊戲 佇列 SET
本題是一道很明顯的佇列結構基礎應用 include using namespace std intmain sort good,good t for int i 0 i return0 佇列在此用了原始的queue佇列,但是考慮到其要將p個元素後置,其實還有一種更簡 ma 便 fan 的方法 使用雙...
藍橋杯 取球遊戲 C語言
今盒子裡有n個小球,a b兩人輪流從盒中取球,每個人都可以看到另乙個人取了多少個,也可以看到盒中還剩下多少個,並且兩人都很聰明,不會做出錯誤的判斷。我們約定 每個人從盒子中取出的球的數目必須是 1,3,7或者8個。輪到某一方取球時不能棄權!a先取球,然後雙方交替取球,直到取完。被迫拿到最後乙個球的一...