代码如下,如有bang帮助,请采纳一下,谢谢。
#include <iostream>
#include <vector>
using namespace std;
const int N = 17; //猴子数量n
const int M = 3; //数到m
//打印N只猴子的状态(“1”表示在圈内,“0”表示不在圈内)
void printVec(const vector<int> &v)
{
for (vector<int>::const_iterator it = v.begin();it != v.end();++it)
{
cout<<*it<<' ';
}
cout<<endl;
}
int monkeyKing(vector<int> v)
{
//n记录还有多少只猴子在圈内
int n = N;
int k = 0;
int i;
while (n > 1)
{
for (i=0;i<N;++i)
{
k += v[i];
if (k == M)
{
v[i] = 0;
printVec(v);
k = 0;
--n;
}
}
}
//最后一只猴子下标为1
for (int i=0;i<N;++i)
{
if (1 == v[i])
return i+1;
}
}
int main()
{
vector<int> v(N,1);
cout<<"猴大王是第"<<monkeyKing(v)<<"只."<<endl;
getchar();
getchar();
return 0;
}
供参考:
#include <stdio.h>
#define ARR_SIZE 100
void sort_game(int *p,int n,int k);
int main(int argc, char* argv[])
{
int i,m,n,num[ARR_SIZE];
scanf("%d%d",&n,&m);
if( m > n ) m=n-1;
for(i=0;i<n;i++){
num[i] = i+1;
}
sort_game(num,n,m);
return 0;
}
void sort_game(int *p,int n,int m)
{
int i=0,cm=0,k=0;
while(k<n-1){
if(*(p+i)!=0)cm++;
if(cm==m){
*(p+i)=0;//退出圈子标志
cm=0;
k++;
}
i++;
if(i==n)i=0;
}
while(*p==0)p++;
printf("%d\n",*p); //输出:最后留下的编号
}