c++ 猴子选大王

来源:百度知道 编辑:UC知道 时间:2024/06/17 09:57:33
n只猴子选大王,选举办法如下:猴子围成一圈,从第一只开始,1,2,3报数,凡报3的退出,余下的 从新开始报数1,2,3,凡报3的退出...如此类推,直到剩下一只猴子,就是大王。
输入N,求出排第几位的是大王?

http://bbs.lehu.shu.edu.cn/Article.aspx?aid=25182

作为参考

#include<iostream>

using namespace std;
int shan(int m,int n );
int n,m,posicion=0;
int *fu ;
int main()
{
cin>>n>>m;
fu=new int[n+1];
for(int i=1;i<=n;i++)
{
fu[i]=i;
}
shan(m, n) ;
}
int shan(int m,int n)
{
if(n>0)
{

posicion+=m;
while(posicion>n)
{
posicion-=n;
}
cout<<fu[posicion]<<endl;
for(int c=posicion;c<=n;c++)
{
fu[c]=fu[c+1];
}posicion--;
shan(m,n-1);
}
}

输入 10 3 或 20 3试试

约瑟夫环问题
有公式
f[1]=0;
f[i]=(f[i-1]+m)%i; (i>1)

var
n,i,j,num:longint;
s:array [1..50000] of longint;
procedure chuli;
begin
for i:=1 to n do
begin