算法 js 解决约瑟夫问题

 //length表示总人数
 //start表示从第几个人开始
 //th表示数到几消亡 
function Joseph(length,start,th=3){
  if(start>length){
    console.log("ERROR:开始位置大于总长度");
    return
  }
//首先建立一个数组 数组中的1表示存在者;0表示消亡者
  var array=[];
  for(let i=0;i<length;i++){array.push(1);}
// count表示报数到了几;
// sum表示还剩下几个人;
// pos表示报数者的位置;
  var pos=start-1;
  var sum=length;
  var count=0;
//   当就剩下一个人的时候 停止报数
  while(sum>1){
    count+=array[pos];
//  当报数者为th的时候 该报数者消亡 总人数-1 报数重置为0
    if(count===th){         
      array[pos]=0;
      sum--;   
      count=0;
    }

//  当一轮报数完毕时候 从头再继续报数
    if(pos===length-1){
      pos=0;   
    }
    else{
      pos++
    } 
  }
//  报数完毕后 输出最后幸存者的索引值
  console.log("幸存者位置为:"+(array.indexOf(1)+1))
}
 Joseph(4,6);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容