描述:一群人围成一个圆圈,谁数到某一个数,谁就被淘汰,看谁笑到最后。亦可称为约瑟夫问题
输入n个人,某个数m,剩余的人数,
6 5 2
输出最后k个人的编号
3 1
代码如下
#include <stdio.h>
#define N 100
int main(){
int n,m,k,i;
int a[N];
int nptr=0;//nptr表示报数人位置的移动//
scanf("%d %d %d",&n,&m,&k);
for(i=0;i<n;i++)
a[i]=i+1;
for(i=n;i>0;i--) //n个人,n次循环//
{
int count=0;//count表示报出的数//
while(count<m)//报出的数不能等于指定的数//
{
while(a[nptr]==0)
nptr=(nptr+1)%n;//跳过出圈的位置//
count++;
nptr=(nptr+1)%n;
}
nptr--;
if(nptr<0)
nptr=n-1;
if(i<=k)
printf("%d\n",a[nptr]);
a[nptr]=0;
}
return 0;
}