【转】一个报数游戏(约瑟夫环问题)

今天早上,群里有人除了道题:

“随便给一个数 比如100,那么从1到100围成一个圆圈,然后就类似123123报数一样逢3就舍掉,一直这样轮询   那么最后剩下来的那个数是多少? ” 

这个也算是老题目了,园子里边也曾针对此题有过激烈的讨论,那时候追求用oo来解决。如今既然又有人提了出来,我便抽了点时间写了写自己的想法:

 

ExpandedBlockStart.gif 代码
< script type = " text/javascript " >
var  a_game  =   function (pNum){
    
var  players  =  [];
    
for ( var  i = 1 ;i <= pNum;i ++ ){
        players.push(i);    
    }
    
var  flag = 0 ;
    
while (players.length > 1 ){
        
var  outPlayerNum  =   0 ,len = players.length;
        
for ( var  i = 0 ;i < len;i ++ ){
            flag
++ ;
            
if (flag == 3 ){
                flag
= 0 ;
                document.writeln(
" 出局: " + players[i - outPlayerNum]);
                players.splice(i
- outPlayerNum, 1 );
                outPlayerNum
++ ;
            }
        }
    }
    
return  players[ 0 ];
};
document.writeln(
" <br/>剩下: " + a_game( 100 )); 
< / script>

 

 

结果如下:

 

ExpandedBlockStart.gif 代码
出局 : 3  出局 : 6  出局 : 9  出局 : 12  出局 : 15  出局 : 18  出局 : 21  出局 : 24  出局 : 27  出局 : 30  出局 : 33  出局 : 36  出局 : 39  出局 : 42  出局 : 45  出局 : 48  出局 : 51  出局 : 54  出局 : 57  出局 : 60  出局 : 63  出局 : 66  出局 : 69  出局 : 72  出局 : 75  出局 : 78  出局 : 81  出局 : 84  出局 : 87  出局 : 90  出局 : 93  出局 : 96  出局 : 99  出局 : 2  出局 : 7  出局 : 11  出局 : 16  出局 : 20  出局 : 25  出局 : 29  出局 : 34  出局 : 38  出局 : 43  出局 : 47  出局 : 52  出局 : 56  出局 : 61  出局 : 65  出局 : 70  出局 : 74  出局 : 79  出局 : 83  出局 : 88  出局 : 92  出局 : 97  出局 : 1  出局 : 8  出局 : 14  出局 : 22  出局 : 28  出局 : 35  出局 : 41  出局 : 49  出局 : 55  出局 : 62  出局 : 68  出局 : 76  出局 : 82  出局 : 89  出局 : 95  出局 : 4  出局 : 13  出局 : 23  出局 : 32  出局 : 44  出局 : 53  出局 : 64  出局 : 73  出局 : 85  出局 : 94  出局 : 5  出局 : 19  出局 : 37  出局 : 50  出局 : 67  出局 : 80  出局 : 98  出局 : 17  出局 : 40  出局 : 59  出局 : 86  出局 : 10  出局 : 46  出局 : 77  出局 : 26  出局 : 71  出局 : 31  出局 : 100  出局 : 58  
剩下
: 91

 

 

 

 

转自:http://www.cnblogs.com/bravfing/archive/2010/08/04/1791782.html

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值