#include <iostream>
#include <string>
using namespace std;
class B{
//猴子选大王
//举例 m=9, n=5 依次出局:
/*1 2 3 4 5 6 7 8 9
6 7 8 9 1 2 3 4
2 3 4 6 7 8 9
8 9 2 3 4 6
6 8 9 2 3
6 8 9 2
8 9 2
2 8
8
*/
//举例 m=9, n=12 依次出局:
/*1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2
8 9 1 2 4 5 6
5 6 8 9 1 2
5 6 8 9 1
8 9 1 5
8 9 1
8 9
8
*/
public: void selectKing(int m,int n){
int i,j,k;//用于循环
int y[100]; //用于给猴子编号
int x[100]; //用于临时替换y[],类似两变量互换数值时的临时变量temp,防止y[]中变量值丢失
int count;
int t; //被踢出局的猴子下标(找到这个是关键)
for(i=0;i<m;i++){
y[i]=i+1; //给每个猴子编号1到m
}
while(m>1){
count=0;
for(i=0;i<n;i++){
if(n%m==0){
t=m-1;
}else{
t=n%m-1;
}
}
for(i=0;i<m-1;i++){
if(t+1+i<m){
x[i]=y[t+1+i];
}else{
x[i]=y[count++];
}
}
for(i=0;i<m-1;i++){
y[i]=x[i];
cout<<"y["<<i<<"]="<<y[i]<<endl;//用于调试
}
cout<<endl;
m--;
}
cout<<y[0]<<endl; //大王所在位置
}
};
int main(){
B b;
b.selectKing(9,12);
system("pause");
return 0;
}

4534

被折叠的 条评论
为什么被折叠?



