首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 ># R语言——约瑟夫环

# R语言——约瑟夫环

作者头像
诡途
发布2022-05-09 17:36:37
发布2022-05-09 17:36:37
3480
举报
文章被收录于专栏:诡途的python路诡途的python路

约瑟夫环:

n个人围成一个圈,从第一个人点名,每数到第三个人,这个人移出圈外, 依次类推,求最后留下来的人编号是?

代码语言:javascript
复制
思路:每次循环重新编码序号作为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)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 约瑟夫环:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档