12个小朋友手拉手站成一个圆圈,从某一个小朋友开始报数,报到7的那个小朋友退到圈外,然后他的下一

2020-05-16 教育 1002阅读
用out来记录小朋友的状态true为已经退出,false为还在圈内
我的算法:我们开始“报数”,每一轮报数游戏都会出去一个人,所以一共进行11轮报数
进行报数时,如果轮到的小朋友已经出圈了,我们就用while继续往后找直到找到一个没有报数的人,然后把第7个这样找到的人退出去,继续进行下一轮报数
每当一个小朋友x退出去,我们就out[x]:=true
n:=12;
now:=0;
for t:=1 to n-1 do //一共进行n-1轮报数游戏
begin
for i:=1 to 7 do
begin
now:=now mod n+1; //由于是一个圈,我们要mod使其可以循环
while out[now] do now:=now mod n+1; //当 now已经出圈了,我们继续找 直到找到
end;
out[now]:=true; //将这个第7个报数的退出去
end;
for i:=1 to n do //当前还没有出圈的就是我们需要的答案
if not out[i] then ans:=i;
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com