OJ.2324: 约瑟夫环问题【数组】

2324: 约瑟夫环问题【数组】

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 714   Solved: 402
[ Submit][ Status][ Web Board]

Description

 约瑟夫环问题:设有n个人围坐一圈,并按顺时针方向1n编号。从第s个人开始进行报数,报数到第m个人,此人出圈,再从他的下一个人重新开始从1m的报数进行下去 ,直到只剩一个人为业

Input

人数n

从第s个人开始报数s

报到第几个数m

Output

剩下的最后一个人的编号

Sample Input

9
1
3

Sample Output

1

#include
#include
bool a[100]= {0};
int main()
{
    int n,m;
    int s=0,t,w,f=0;
    scanf("%d",&n);
    scanf("%d",&w);
    scanf("%d",&m);
    t=w-1;
    do
    {
        t++;//逐个枚举圈中的所有位置
        if(t>n)
            t=1;//数组模拟环状,最后一个与第一个相连
        if(!a[t])//第t个位置上有人则报数
            s++;
        if(s==m)//当前报的数是m
        {
            s=0;//计数器清零
            a[t]=1;//此处人已死
            f++;//死亡人数+1
        }
    }
    while(f!=n);
    printf("%d ",t);
    return 0;
}

这道题只是在原问题上做了一些些的拓展,即从第S个人开始报数,而不是从第一个。
这就只需要把t的初值由0变为要输入的值-1即可,由于一开始便执行了t++;

你可能感兴趣的:(OJ.2324: 约瑟夫环问题【数组】)