<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<button onclick="commit()">确定</button>
</body>
<script>
function commit() {
var people = 100
var node = {//链表节点
n: 1,
before: null,
next: null
}
var linked = node
for (var i = 2; i <= people; i++) {//链表构建前驱后继
var temp = {
n: i,
before: null,
next: null
}
node.next = temp
temp.before = node
node = node.next
}
node.next = linked//第5个和第1个拉手
linked.before = node
node = linked;//出列
console.log(node)
console.log(node)
//逻辑
for (var i = 1;i<=10000 ; i++) {
if (node.next.n === node.n) {
break
}
if (i % 3 === 0) {
node.before.next = node.next
node.next.before = node.before
}
node = node.next
}
console.log(node)
console.log(node.n)
console.log('outOne'+node.n)
}
</script>
</html>
<!--f(1) = 1-->
<!--f(2) = 2 = (f(1) + 3) % 2-->
<!--f(3) = 2 = (f(2) + 3) % 3-->
<!--f(4) = 1 = (f(3) + 3) % 4-->
<!--f(5) = 4 = (f(4) + 3) % 5-->
<!--...-->
<!--f(n) = x = (f(n-1) + 3) % n-->
<!--*/-->
<!--var total = 100-->
<!--var outNum = 3-->
<!--var last = 0-->
<!--for (var i = 2; i <= total; i++) {-->
<!--last = (last + outNum) % i-->
<!--}-->
<!--var outOne = last + 1-->
<!--console.log('outOne' + outOne)-->
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <button οnclick="commit()">确定</button> </body> <script> function commit(n, begin) { var datas = [] for (var i = 0; i < n; i++) { datas.push(true) } var m = n var index = begin - 1 var count = 0 while (m > 1) { if (datas[index] === true) { count++ if (count === 3) { datas[index] = false count = 0 m-- } } index++ if (index === n) { index = 0 } } // console.log(datas) for (var j = 0; j < datas.length; j++) { if (datas[j] === true) { console.log(j + 1) } } // // var total = 50 // var obj = { // beforeNum: null, // nextNum: null, // n: 1 // } // var lian = obj // // for (var i = 2; i <= total; i++) { // var temp = { // n: i, // beforeNum: null, // nextNum: null // } // obj.nextNum = temp // temp.beforeNum = obj // obj = obj.nextNum // } // obj.nextNum = lian // lian.beforeNum = obj // // obj = lian; // // for (var i = 1;i<=100 ; i++) { // if (obj.nextNum.n === obj.n) { // break // } // if (i % 3 === 0) { // obj.beforeNum.nextNum = obj.nextNum // obj.nextNum.beforeNum = obj.beforeNum // } // obj = obj.nextNum // } } </script> </html>