猴子選大王問題(用最簡單的思想)

2021-09-13 17:54:09 字數 996 閱讀 3234

有 n 只猴子圍成一圈,從 1 - n 編號,大家決定從中選出乙個大王。經過協商,決定選大王的規則為:從編號為1的猴子開始報數,報到 k 的猴子出圈,然後再從下乙隻開始繼續報 1 到 k ……,最後剩下來的那乙隻就是大王。要求程式設計從鍵盤輸入 n、k ,輸出成為大王的猴子編號。

輸入樣例3 2

輸出樣例3

差不多是這個意思

前置工作是:開乙個陣列記錄猴子的編號

思想很簡單,用乙個變數記錄被淘汰的猴子,只要剩下的猴子不為1,就不停迴圈(此處用了while),用乙個簡單的for迴圈遍歷猴子,當一邊遍歷完後,因為有while的存在,會遍歷第2、3、4、5……遍,十分方便不用加if語句,只要有猴子被踢了,這個陣列就置為0,最後存在的陣列輸出即可。

#include using namespace std;

int main()

{ int n,k,i;

cin>>n>>k;

int a[n+1000];

int count=0,number=n;

for (i=0;i1) //2

{for(i=0;i猴子陣列初始化

判斷條件,只要剩下的猴子大於1就執行此迴圈

如果這個猴子已經被踢出去了,就跳過這個(continue)繼續看下乙個

每有乙個猴子說數,就++(注意如果這個猴子已經被踢,那麼continue會直接到i++而不會經過count++)

當count=k時,說明這個猴子被踢了,那麼猴子數number-1,重新說數故count=0,把這處陣列定義為0代表猴子被踢

遍歷尋找剩下的猴子

好了,希望大家可以看懂,看懂這個再去搞一些大佬的演算法,我學會了也會繼續補充的

喜歡的話加個關注吧,我是wanna_ac

猴子選大王問題

猴子選大王 亞瑟夫換 的問題是資料結構和演算法中常見的一類問題。可以使用迴圈佇列實現,也可以使用鍊錶實現。還可以使用陣列的回溯法實現。m只猴子要選大王,選舉辦法如下 所有猴子按1,2 n編號圍成一圈,從第一號開始順序1,2 m,凡是報m號的退出圈外,如此迴圈報數直到圈內只剩乙隻猴子時這只猴子就是大王...

猴子選大王問題

創立乙個記錄編號的陣列,用指標在這個陣列迴圈移動計數,當計數為m時將這個元素做移除標記,直到剩下最後乙個元素。1 intmain 211 int p v 0 12 int z 0,x 1,co 1 z為剔除元素個數,x為元素在陣列中位置,co為計數 13for 1423 p 24 x 25 26if...

約瑟夫問題(猴子選大王)

問題描述 約瑟夫問題 有 只猴子,按順時針方向圍成一圈選大王 編號從 到 從第 號開始報數,一直數到 數到 的猴子退出圈外,剩下的猴子再接著從1 開始報數。就這樣,直到圈內只剩下乙隻猴子時,這個猴子就是猴王,程式設計求輸入 後,輸出最後猴王的編號。輸入資料 每行是用空格分開的兩個整數,第乙個是 n,...