约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
实现代码
#include<iostream>
using namespace std;
int main()
{
int arr[105];
int n,m;
while(cin>>n>>m&&!(n==0&&m==0))
{
int k=1,count=0;
for(int i=0;i<n;i++)
{
arr[i]=k;
k++;
}
k=n;
while(k>1)
{
for(int i=0;i<n;i++)
{
if(arr[i]==0);
else if(arr[i]!=0)
{
count++;
}
if(count==m)
{
arr[i]=0;
k--;
count=0;
}
}
}
for(int i=0;i<n;i++)
{
if(arr[i]!=0)
{
cout<<i+1<<endl;
}
}
}
return 0;
}