约瑟夫环

js

//定义了一个双向链表的节点
function  Node(n,before,next) {
     this .n = n;
     this .before = before;
     this .next = next;
}
 
var  node =  new  Node(1, null , null );
var  linked = node;
 
for ( var  i =2;i <= 50;i++) {
     var  temp =  new  Node(i, null , null );
     //双向链表构建关联是前驱和后继两个
     node.next = temp;
     temp.before = node;
     node = node.next;
}
//第50个和第1个拉手
node.next = linked;
linked.before = node;
 
 
//出列的逻辑
node = linked;
for ( var  i = 1;;i++) {
     if (node.next == node) {
         //剩下一个node了
         break ;
     }
     if (i % 3 == 0) {
         //node出列
         node.before.next = node.next;
         node.next.before = node.before;
     }
     node = node.next;
}
 
document.write(node.n);

_______________________________________________________________________________________________________________

java

import  java.util.ArrayList;
import  java.util.List;
import  java.util.Scanner;
   
public  class  Yue {  
     public  static  void  main(String[] args) {  
//        Scanner scanner = new Scanner(System.in);  
//        System.out.print("请输入总人数:");  
//        int totalNum = scanner.nextInt();  
//        System.out.print("请输入报数的大小:");  
//        int cycleNum = scanner.nextInt();  
//        System.out.print("请输入开始编号:");  
//        int  startNO= scanner.nextInt();  
//        yuesefu(totalNum, cycleNum,startNO);  
         yuesefu( 5 2 , 3 );  
     }  
   
    public  static  void  yuesefu( int  totalNum,  int  countNum, int  startNO) {  
         // 初始化人数  
         List<Integer> start =  new  ArrayList<Integer>();  
         for  ( int  i =  1 ; i <= totalNum; i++) {  
             start.add(i);  
         }  
         //从下标为K开始计数  
         int  k = startNO- 1 ;  
         while  (start.size() > 0 ) {  
             System.out.println(start);
             //第m人的索引位置  
             k = (k + countNum) % (start.size()) -  1 ;  
            // 判断是否到队尾  到队尾时候k=-1
             if  (k <  0 ) {  
                 System.out.println(start.get(start.size()- 1 ));  
                 start.remove(start.size() -  1 );  
                 k =  0 ;  
             else  {  
                 System.out.println(start.get(k));  
                 start.remove(k);  
             }  
         }  
     }  
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值