2324: 约瑟夫环问题【数组】
Description
约瑟夫环问题:设有n个人围坐一圈,并按顺时针方向1—n编号。从第s个人开始进行报数,报数到第m个人,此人出圈,再从他的下一个人重新开始从1到m的报数进行下去 ,直到只剩一个人为业
Input
人数n
从第s个人开始报数s
报到第几个数m
Output
剩下的最后一个人的编号
Sample Input
9
1
3
Sample Output
1
#include<stdio.h>
int main()
{
int i,j,k,s,n,m,num,sum;
scanf("%d %d %d",&n,&s,&m);
int a[99];
memset(a,0,sizeof(a));
for(i=0;i<n;i++)
{
a[i]=i+1;// eg.1 2 3 4 5 6 7 8 9
}
/*for(i=0;i<n;i++)
{
printf("%d",a[i]);
}*/
i=s-1;
num=0; // only one then get the answer
k=0; // count
while(num<n-1)
{
if(a[i]!=0)
{
k++;
}
if(k==m)
{
a[i]=0; //exit
num++;
k=0; // count again
}
i++;
if(i==n)
{
i=0; //count from top
}
}
for(i=0;i<n;i++)
{
if(a[i]!=0) //find the survival.
{
printf("%d",a[i]);
}
}
return 0;
}