程式設計題《報數3的人退出圈子》
18.【問題描述】
有n個人圍成一圈,按順序從1到n編號。從第乙個人開始報數,報數3的人退出圈子,下乙個人從1開始重新報數,報數3的人退出圈子。如此迴圈,直到留下最後乙個人。問留下來的人的編號。
【輸入形式】
考慮如下兩種情況:
如果n超出「n must be a natural number less than 10000」,則列印「n is out of range of valid values.」;其中n應該用如上輸入的具體的n數值代替;換行;
如果n是有效範圍的數值,則列印「last no. is:」;然後直接在冒號後面輸出最後留下來的人的編號;換行;
【執行時的輸入輸出樣例1】(下劃線部分表示輸入)
input n(n must be a natural number less than 10000):5
last no. is:4
【執行時的輸入輸出樣例2】(下劃線部分表示輸入)
input n(n must be a natural number less than 10000):100000
100000 is out of range of valid values.
解題思路與易錯分析:
這道題其實就是約瑟夫環的簡化,但是要注意輸入值的合法性
具體的解體思路請移步與:
下面附上我的**:
#include
using namespace std;
int main()
else
cout << "last no. is:"< package 資料結構 約瑟夫問題 設編號1 2 3.n的n個小孩圍坐一圈,約定編號為k的人從1開始報數,數到m的人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推 直到所有人出列位置,由此產生乙個出隊的編號序列 first指向第乙個結點 一開始的單個結點保持環形的性質 自反 新增乙... include 標頭檔案 int main 把1到n分別送到group陣列 for i 0 i 當i i 1時,讓i回到第乙個人 if group i 0 如果這個數不為0,m加1 else if m 3 0 用m除以3的餘數來判斷這個人報的是不是3,如果是總數減1,並把這個數置0,也就是退出圈子 ... 遊戲規則 n人圍成圈,數到三的人淘汰,直到人數小於2,遊戲結束。呈現 n int input 請輸入參加遊戲的人數 list1 for i in range 1 n 1 建立列表 定義move函式將未剔除掉的人移動到人群的末尾 defmove list sep for i in range sep ...3 迴圈陣列實現約瑟夫(報數出圈)問題
n個人圍一圈,報123,報到三退出圈子,誰留下?
Python小遊戲 淘汰報數為3的人