17世纪的法国数学家加斯帕在《数目的游戏问题》中讲了这样一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是非教徒。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
var person = new Array(30);//30个人
person.fill(0); //全部填充为0,0代表在船上,1代表扔下海里
var i = 0; //数组下标
var num = 0; //表示数到9,就被扔下去
var counter = 0; //记录被扔下水的人数
do{
if(person[i%30]==0){
num++;
}
if(num==9){
person[i%30]=1; //1代表扔下海里
counter++;
num=0;
}
i++;
}while(counter<15)
for(i=0;i<30;i++){
if(person[i]==1){
console.log(i+1);//5 6 7 8 9 12 16 18 19 22 23 24 26 27 30
}
}
</script>
</body>
</html>