1054: 【基础】约瑟夫问题

内存限制:64 MB 时间限制:8.000 S
评测方式:文本比较 命题人:
提交:563 解决:136

题目描述

有M个人,其编号分别为1-M。这M个人按顺序排成一个圈。现在给定一个数N,从第一个人开始依次报数,数到N的人出列,然后又从下一个人开始又从1开始依次报数,数到N的人又出列...如此循环,直到最后一个人出列为止。 

输入

输入只有一行,包括2个整数M,N。之间用一个空格分开。

输出

输出只有一行,包括M个整数。

样例输入 复制

8 5

样例输出 复制

5 2 8 7 1 4 6 3

提示

分析:这样一道题用指针的方法解很直观。但用数组的方法也可以做出来。 我们设数组A有M个变量,每个变量中放的数是1。现在计数器K从1开始向后数,每数一个变量则累加器S把变量中的数相加。当数到最后一个变量M时,自动转向第一个变量接着数。当累加器的数到N时,最后一个被加的变量出列(打印其下标值,同时将该变量的值由1变为0),同时累加器的值清零。然后从出列的下一个变量又开始向后累加每个变量的值,直到加到N时,最后一个被加的变量出列......用这种方法不担心出列的变量被重复相加,因为一旦被判出列,该变量的值由1变为0, 即使相加也无妨。