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, 即使相加也无妨。