约瑟夫环问题

来源:互联网 发布:淘宝天天特价规则 编辑:程序博客网 时间:2024/06/05 04:58

ACM模版

约瑟夫环问题

/* *  n个人(编号 1...n),先去掉第m个数,然后从m+1个开始报1, *  报到k的退出,剩下的人继续从1开始报数.求胜利者的编号. */int main(int argc, const char * argv[]){    int n, k, m;    while (cin >> n >> k >> m, n || k || m)    {        int i, d, s = 0;        for (i = 2; i <= n; i++)        {            s = (s + k) % i;        }        k = k % n;        if (k == 0)        {            k = n;        }        d = (s + 1) + (m - k);        if (d >= 1 && d <= n)        {            cout << d << '\n';        }        else if ( d < 1 )        {            cout << n + d << '\n';        }        else if ( d > n )        {            cout << d % n << '\n';        }    }    return 0;}
0 0
原创粉丝点击