约瑟夫环

题目:约瑟夫环
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

int Josephus (int sum, int signal)
{
    if (sum < 1 || signal < 1)
        return -1;

    int call_off_times = 0;
    for (int i = 2; i <= sum; i++)
        call_off_times = (call_off_times + signal) % i;

    return call_off_times;
}

int main ()
{
    int n, m;
    cin >> n >> m;
    cout << "We need call " << Josephus (n, m) << " times" << endl;
    return 0;
}
posted @ 2014-07-18 21:07  wu_overflow  阅读(122)  评论(0编辑  收藏  举报