造反的孩子们 @流浪大叔的公园
【每日一题】小孩围圈,数三退一
1
//
假设500个小孩手拉着手围着一圈,数三就退出圈子,最后留在圈内的小孩是第几号?
2
3
public
class
Count3Quit
{
4
public
static
void
main(String[] args)
{
5
KidCircle kc
=
new
KidCircle(
500
);
6
7
Kid k
=
kc.first;
8
int
countNum
=
0
;
9
while
(kc.count
>
1
)
{
10
countNum
++
;
11
if
(countNum
==
3
)
{
12
countNum
=
0
;
13
kc.del(k);
14
}
15
k
=
k.right;
16
}
17
System.out.println(
"
剩下的小孩编号是:
"
+
(kc.first.id
+
1
));
18
}
19
}
20
21
class
Kid
{
22
int
id;
23
Kid left;
24
Kid right;
25
}
26
27
class
KidCircle
{
28
int
count
=
0
;
29
Kid first,last;
30
31
32
KidCircle (
int
n)
{
33
for
(
int
i
=
0
;i
<
n;i
++
)
{add();}
34
}
35
36
void
add()
{
37
Kid k
=
new
Kid();
38
k.id
=
count;
39
if
(count
<=
0
)
{
40
first
=
k;
41
last
=
k;
42
k.left
=
k.right
=
k;
43
}
else
{
44
k.left
=
last;
45
k.right
=
first;
46
last.right
=
first.left
=
last
=
k;
47
}
48
count
++
;
49
}
50
51
void
del(Kid k)
{
52
if
(count
<=
0
)
{
return
;}
53
else
if
(count
==
1
)
{first
=
last
=
null
;}
54
else
{
55
k.left.right
=
k.right;
56
k.right.left
=
k.left;
57
if
(k
==
first)
{ first
=
k.right;}
58
else
if
(k
==
last)
{last
=
k.left;}
59
}
60
count
--
;
61
}
62
}
发表于 2012-04-30 12:56
【造反的孩子们】@【流浪大叔的公园】
阅读(86)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
<
2025年7月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
导航
BlogJava
首页
发新随笔
发新文章
联系
聚合
管理
统计
随笔: 0
文章: 10
评论: 0
引用: 0
留言簿
给我留言
查看公开留言
查看私人留言
文章档案
(10)
2012年5月 (4)
2012年4月 (6)
搜索
最新评论