C語言解決 n個人 123報數問題

2021-10-05 07:18:57 字數 1025 閱讀 5058

題目:有n個人圍成一圈,順序排號。從第乙個人開始報數(從1到3報數),凡報到3的人退出 圈子,問最後留下的是原來第幾號的那位。

程式設計思路

此遊戲的關鍵問題在於解決 n個人圍成一圈。下一次報數後每個人的位置發生變化。

我們可以利用一維陣列儲存每個人的位置。報數時,報到3時,對該元素清零。下一次遇到0元素跳過。每次結束一圈後,用乙個變數start記錄報到了多少,下一次開始時從變數start的基礎上開始加。這樣就解決了n個人的迴圈問題。當然我們也可以構建迴圈鍊錶進行解決n個人的迴圈問題。

源**如下

#include

#include

#define maxsize 200

//巨集定義 定義最大陣列元素個數

intmain()

;printf

("請輸入參加報數遊戲的總人數 n (0 < n < 200):例如:9\n");

scanf

("%d"

,&n)

;for

(int i =

0;i < n;i++

)while

(n - sum0 >2)

//sum0 表示0的個數,

} start = k;

//記錄下一圈的開始時的報數數字

}printf

("最後留下的是原來順序中的:\n");

for(

int i =

0;i < n;i++

)//輸出格式控制

return0;

}

執行結果如下(1)

n個人迴圈報數1 3問題

主要的思路見下圖 我相信只要大家吧自己的思路理清楚了,實現就簡單了。以下給出 public class test public static int getlastname int num return getlastname aa static arraylistnewlist public st...

C語言 N個人圍成一圈報數淘汰問題

一 問題描述 有17個人圍成一圈 編號為0 16 從第 0號的人開始從 1報數,凡報到 3的倍數的人離開圈子,然後再數下去,直到最後只剩下乙個人為止。問此人原來的位置是多少號?二 問題解決 1.定義陣列記錄每個編號的狀態 是否被淘汰 2.在未被淘汰的人中檢查是否數到3,若是,淘汰此人 3.繼續此過程...

C語言經典例69 有n個人圍成一圈報數問題

有n個人圍成一圈,順序排號。從第乙個人開始報數 從1到3報數 凡報到3的人退出圈子,問最後留下的是原來第幾號的那位。假設全部人都退圈,則最後乙個退圈的人就是題目中留下的那一位,詳細思路請見實現中的注釋。include intmain 當所有人都退出圈子時停止迴圈 最後退圈的人就是題中有乙個留在圈內的...