12个小朋友手拉手站成一个圆圈,从某一个小朋友开始报数,报到7的那个小朋友退到圈外,然后他的下一位重新报“1”.这样继续下去,最后只剩下一个小朋友,他原来站在什么位置上呢?用pascal
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 10:30:41
12个小朋友手拉手站成一个圆圈,从某一个小朋友开始报数,报到7的那个小朋友退到圈外,然后他的下一位重新报“1”.这样继续下去,最后只剩下一个小朋友,他原来站在什么位置上呢?用pascal
12个小朋友手拉手站成一个圆圈,从某一个小朋友开始报数,报到7的那个小朋友退到圈外,然后他的下一位重新报“1”.这样继续下去,最后只剩下一个小朋友,他原来站在什么位置上呢?用pascal
12个小朋友手拉手站成一个圆圈,从某一个小朋友开始报数,报到7的那个小朋友退到圈外,然后他的下一位重新报“1”.这样继续下去,最后只剩下一个小朋友,他原来站在什么位置上呢?用pascal
用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;