早教吧作业答案频道 -->其他-->
pascal约瑟夫n个人站成一圈,从某个人开始数数,每次数到m的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人。现在有一圈人,k个好人站在一起,k个坏人站在一起。从第一个好
题目详情
pascal约瑟夫
n个人站成一圈,从某个人开始数数,每次数到m的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人。
现在有一圈人,k个好人站在一起,k个坏人站在一起。从第一个好人开始数数。
你要确定一个最小的m,使得在第一个好人被杀死前,k个坏人先被杀死。
输入
一个k,0 输出
一个m
样例:
joseph.in
3
joseph.out
5
另一个样例:
joseph.in
4
joseph.out
30
务必在程序后加一些必要说明,感谢!
n个人站成一圈,从某个人开始数数,每次数到m的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人。
现在有一圈人,k个好人站在一起,k个坏人站在一起。从第一个好人开始数数。
你要确定一个最小的m,使得在第一个好人被杀死前,k个坏人先被杀死。
输入
一个k,0
一个m
样例:
joseph.in
3
joseph.out
5
另一个样例:
joseph.in
4
joseph.out
30
务必在程序后加一些必要说明,感谢!
▼优质解答
答案和解析
给你更好理解的。
这是筛法
var
n,m,i,s,p:integer;
a:array[1..10000] of integer;
begin
read(n,m);//这步不用说了吧?
for i:=1 to n do
a[i]:=1;//先全部赋值1
p:=0;s:=0;//统计人数和报数字用的
repeat
for i:=1 to n do
begin
if a[i]=0
then continue; //用于等会排除出圈者
s:=s+a[i];//不断累加(报数字)
if s=m then//出圈者
begin
write(i,' ');打印出圈者;
a[i]:=0;//明白刚才continue的意思了吧
p:=p+1;//人数减少一个;
s:=0;//重头报起。
end;
end;
until p=n;//直到人数到了
end。
其实呢,筛法的原理就是:
(1)先统一初始化,一般用for。可以赋值0,1,true,false。
(2) 在数组范围内,根据条件筛选,不符合条件的做反标记。
(3)输出结果。根据标记值输出。
所以,一般需要三个循环
这是筛法
var
n,m,i,s,p:integer;
a:array[1..10000] of integer;
begin
read(n,m);//这步不用说了吧?
for i:=1 to n do
a[i]:=1;//先全部赋值1
p:=0;s:=0;//统计人数和报数字用的
repeat
for i:=1 to n do
begin
if a[i]=0
then continue; //用于等会排除出圈者
s:=s+a[i];//不断累加(报数字)
if s=m then//出圈者
begin
write(i,' ');打印出圈者;
a[i]:=0;//明白刚才continue的意思了吧
p:=p+1;//人数减少一个;
s:=0;//重头报起。
end;
end;
until p=n;//直到人数到了
end。
其实呢,筛法的原理就是:
(1)先统一初始化,一般用for。可以赋值0,1,true,false。
(2) 在数组范围内,根据条件筛选,不符合条件的做反标记。
(3)输出结果。根据标记值输出。
所以,一般需要三个循环
看了pascal约瑟夫n个人站成一...的网友还看了以下:
1、用质因数分解法秋下列各组数的最大公约数.48和5432和96120、180和2102、m的倍数有 2020-03-31 …
/*3、约瑟夫问题约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始 2020-05-17 …
怎样证明根号3为无理数?反证若根号3是有理数,则有m/n的形式,m与n既约所以3=m^2/n^2m 2020-06-23 …
在227,-(-1),-|8-22|,-3,-32,-(-13)3,0中有理数有m个,自然数有n个 2020-07-19 …
在-13,227,0,-1,0.4,π,2,-3,-6这些数中,有理数有m个,自然数有n个,分数有 2020-07-19 …
排列组合问题数字和是19的四位数有M个,数字和是20的四位数有N个,求MN之差. 2020-07-22 …
下列各数:—125,23,三点五,0,二分之三,负三点二,负零点零六,54%,其中负数有m个,正有n 2020-10-30 …
在-8,2006,三又七分之二,o,-5,+13,负四分之一,-6.9中,正数有M个,负分数有N个, 2020-11-06 …
有一位商人,从北京向上海的家中打电话,通话m分钟的电话费,由函数f(m)=1.06×(0.5[m]+ 2020-11-14 …
已知数轴甲上有A、B、C三点,分别表示-30、-20、0,动点M从点A出发,以每秒1个单位的速度向终 2020-11-20 …