问题1027--【一维数组】(约瑟夫问题(jsf.pas/cpp))

1027: 【一维数组】(约瑟夫问题(jsf.pas/cpp))

时间限制: 1 Sec  内存限制: 128 MB
提交: 3  解决: 2
[提交] [状态] [讨论版] [命题人:]

题目描述

m 个人,其编号分别为 1~m。按顺序围成一个圈,现在给定一个数 n,从第一个人开始依次报数,报到 n 的人出圈,然后再从下一个人开始,继续从 1 开始依次报数,报到 n 的人再出圈,……如此循环,直到最后一个人出圈为止。编程输出所有人出圈的顺序。

输入

一行两个正整数 m n,之间用一个空格隔开,1≤m<1001≤n≤32767

输出

输出 一 行m个正整数,表示依次出圈的人的编号,第个数用一个空格隔开。

样例输入 Copy

8 5

样例输出 Copy

5 2 8 7 1 4 6 3

提示

定义布尔型数组 p,表示每个人在圈中的状态。假设 p [i]true 表示第 i 个人还在圈中,p[i]false 表示第 i 个人已出圈。模拟报数的过程,从第一个人(i = 1)开始报数,定义计数器 j,初始化为 0,如果 p[i]true,则 j 1,当 j n 时,报到的这个人出圈(p[i] = false,且j=0),……直到所有人都已出圈。程序实现时,另外设计一个计数器 t,记录圈中的剩余人数,初始化为 m

来源/分类