問題描述

設有n座山,計算機與人作為比賽的雙方,輪流搬山。規定每次搬山數不能超過k座,誰搬最後一座淮輸。遊戲開始時,計算機請人輸入山的總數n和每次允許搬山的最大數k,然後請人開始,等人輸入了需要搬走的山的數目後,計算機馬上列印出它搬多少座山,並提示尚餘多少座山。雙方輪流搬山直到最後一座山搬完為止。計算機會顯示誰是贏家,並問人是否要繼續比賽。如果人不想玩了,計算機便會統計出共玩了幾局,雙方勝負如何。

下面是小編準備的一套非常適合零基礎學習C/C++編程的視頻教程

問題分析

程序中先輸入山的座數,要求每次搬山的最大數,從而找出最佳的搬山座數以獲得遊戲的勝利。

程序在若干次遊戲結束後還記錄了電腦跟人的勝負次數。程序中應用了條件語句、循環語句和邏輯判斷語句來實現功能。

在有n座山的情況下,計算機為了將最後一座山留給人,而且又要控制每次搬山的數目不超過最大數k,應搬山的數目要滿足關係:(n-1)%(k+1)。

演算法設計

計算機參加遊戲時應遵循下列原則:

(1) 當剩餘山的數目-1≤可移動的最大數k時,計算機要移(剩餘山數目-1)座,以便將最後一座山留給人。

(2) 對於任意正整數x,y,一定有:

0≤x%(y+1)≤y

在有n座山的情況下,計算機為了將最後一座山留給人,而且又要控制每次搬山的數目不超過最大數k,則它應搬山的數目要滿足下列關係:

(n-1)%(k+1)

如果算出結果為0,即整除無餘數,則規定只搬一座山,以防止冒進後發生問題。

結果如下:

搬山遊戲

遊戲開始

No. 1 game


那裡有多少座山?10

每次允許多少座山?3

你希望多少山搬走?1

現在還剩下9座山.

電腦一走了 1 座山.

現在還剩下8座山.

你希望多少山搬走?3

現在還剩下5座山.

電腦一走了 1 座山.

現在還剩下4座山.

你希望多少山搬走?2

現在還剩下2座山.

電腦一走了 1 座山.

現在還剩下1座山.

你希望多少山搬走?1

現在還剩下0座山.

……………我贏了,你輸了。……………

如圖:


推薦閱讀:
相關文章