今天早上,群里有人除了道题:
“随便给一个数 比如100,那么从1到100围成一个圆圈,然后就类似123123报数一样逢3就舍掉,一直这样轮询 那么最后剩下来的那个数是多少? ”
这个也算是老题目了,园子里边也曾针对此题有过激烈的讨论,那时候追求用oo来解决。如今既然又有人提了出来,我便抽了点时间写了写自己的想法:
代码
<
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>
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>
结果如下:
代码
出局
:
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
剩下 : 91
转自:http://www.cnblogs.com/bravfing/archive/2010/08/04/1791782.html