约瑟夫问题 圆圈报数
(2016-01-06 11:21:17)
标签:
c学习 |
分类: c 程序进阶 |
约瑟夫问题:N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈;…输出依次出圈的人的编号。N,M由键盘输入。
【分析】
(1)由于对于每个人只有出圈和没有圈两种状态,因此可以用布尔型标志数组存储游戏过程中每个人的状态。不妨用true表示出圈,false 表示没有出圈。
(3)模拟报数游戏的过程,直到所有的人出圈为止。
程序如下:
#include
using namespace std;
int n,m,s,f,t;
bool
a[101];
int main()
}
运行结果:
输入:
8
输出: 5 2 8 7 1 4 6 3
这是一个在算法设计上很有名气的经典约瑟夫(Josephu)问题,它有很多变例。如猴子选大王、持密码报数、狐狸追兔子等。