约瑟夫环

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);  
            
}  
        
}  
    
}  
}

点赞