# R语言——约瑟夫环

约瑟夫环:

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)
发布了35 篇原创文章 · 获赞 35 · 访问量 2585

猜你喜欢

转载自blog.csdn.net/qq_35866846/article/details/98948784