洛谷 1996_约瑟夫问题_模拟

lzusa 发布于 2019-05-07 4 次阅读


题目描述

n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.


思路

其实就是一个水题,但是太水了,所以用了一个比较奇怪的方法,开一个数组,每一个数指向他后一个数,如果有一个数出去了就更新这个指针,这样可以快一点

O(nm)


#include 
int f[101];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n-1;i++)
        f[i]=i+1;
    f[n]=1;
    int j=1;
    for (int i=1;i<=n;i++)
    {
        int t=0;
        if (i==1) t=1; 
        while (t
]]>