# R语言——约瑟夫环
【摘要】
约瑟夫环:
n个人围成一个圈,从第一个人点名,每数到第三个人,这个人移出圈外, 依次类推,求最后留下来的人编号是?
思路:每次循环重新编码序号作为names,并根据names 进行筛选
拓展:约瑟夫环...
约瑟夫环:
n个人围成一个圈,从第一个人点名,每数到第三个人,这个人移出圈外,
依次类推,求最后留下来的人编号是?
思路:每次循环重新编码序号作为names,并根据names 进行筛选
拓展:约瑟夫环的关键点——每次循环数&最后留下的人数;代码中的整除数即为每次循环数,循环条件即为最后留下的人数
Survive_No <- function(n){
all <- 1:n #根据人数创建一个向量
names(all) <- 1:n #给all向量创建names属性
while(length(all)>1){ #当剩余1个人时候停止循环
end_names <- as.numeric(names(all[length(all)])) #获取all向量最后一个人的names并转换成numerical格式
all <- all[ifelse(as.numeric(names(all))%%3==0,F,T)] #删除names为3的整数倍的元素,即留下的人编号
names(all) <- 1:length(all)+end_names%%3
#生成新的names,从上一次末尾的names【整除3的余数加1】开始,到新all的长度
}
unname(all) #输出去除names的变量
}
Survive_No(100000)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
文章来源: blog.csdn.net,作者:诡途,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_35866846/article/details/98948784
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)