誰是美猴王--約瑟夫環的實現操作

@一路桐行 2022-01-07 06:30:54 阅读数:869

美猴王 猴王 操作

 這道題目我們采取數組的形式進行處理猴子的數量 

首先這裏唯一需要進行提示的就是我們需要注意一下由於我們進行處理的都是數組 數組下標的索引值是從0開始的

也就是說我們進行下標索引的時候 我們應該注意的是我們自己應該知道 我們的第0個元素其實是第一個元素

下面對於代碼逐步講解

首先演示之前我們需要注意一個問題是關於數據如何循環的問題就是當我們 1 2 3如何再返回1

那麼我們可以采取x=(x+1)%n;

我們給定x=-1; 一開始是x值為0 代錶第一個數 接著 x為1代錶第二個數字

接著x為2代錶第三數字 接著x為0代錶第一個數字 這樣就實現了我們的循環操作的處理
 


#include<algorithm>
#include<iostream>
using namespace std;
int main(){
int a[1001]={0}; //初始化化數組作為環
int n,m;//n代錶總的人數,m代錶報數到幾退出
cin>>n>>m;這個就是有n個猴子 數到m就删除一個猴子
int count=0;//記錄退出的個數
int k=-1;//這裏假定開始為第一個人,下標為0,編號為1,如需從編號x開始,則k=x-2
while(count<n-1){ //總共需要退出n-1個人
int i=0;//記錄當前報數編號//每次删除一個需要重新進行編號處理操作
while(i<m){
k=(k+1)%n; //循環處理下標的操作 這裏是那個就是我們需要進行的是 循環 處 理下 標的 操作 處理 實現
if(a[k]==0){
i++;//這個++完畢之後還是這個比特置 然後我們緊接著判斷是不是i==m如果是的話我們就直接退出就可以
if(i==m){
a[k]=-1;//
count++;//count++
}
}
}
}
for(int i=0;i<n;i++){
if(a[i]==0){
printf("%d\n",i+1);
break;
}
}
return 0;
}

版权声明:本文为[@一路桐行]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201070630540759.html