1~M个人,围成一个圈,轮流报数,报到S的人出列,按顺序输出出列的人的编号
来源:百度知道 编辑:UC知道 时间:2024/06/23 05:31:07
最好用tuber pascal语言
program ex11;
var
f:Array[1..100] of boolean;
n,m,s,t,p:integer;
procedure init;
begin
readln(n,m);
end;
procedure main;
begin
fillchar(f,sizeof(f),true);
repeat
if s<>n then inc(s)
else s:=1;
if f[s] then inc(t);
if t=m then
begin
inc(p);
f[s]:=false;
writeln(s);
t:=0;
end;
until p=n;
end;
begin
init;
main;
end.
/*
约瑟夫问题
这是17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,
必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依
次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止
*/
#include<iostream>
using namespace std;
void main() {
int i, j, k = 1, a[31]; // M = 30
for(i = 0; i <= 30; i++) a[i] = 0;
for(i = 1; i <= 15; i++){
for(j = 1; j <