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

来源:互联网 发布:淘宝助理使用 编辑:程序博客网 时间:2024/06/05 23:55

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

913

Sample Output

1

#include<stdio.h>#include<stdbool.h>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++;