一道很简单的老问题,求更好的解决方法
马嘉楠 2006-11-08
今天在一个论坛看到有人问一个很老的问题。
“10个人围一圈,编号为1的人开始数数,数到能被3整除的编号的人退出,然后再往下数。问最后剩几个人?
如第一圈后:3,6,9退出,还剩7人下一圈从第11开始数。求算法”
看到过这个题目很多次,从来都没有仔细想过写过代码。
下面的方法是我今天看到题目后的第一反应,应该有更好的吧。
你们都是怎么做的啊,学习一下,谢谢啦!
我算法很弱的。。。
一、数组实现
1. for循环初始化每个人的值为0
2. 开始报数,如果所报之数能被3整除,设置此人的值为1
3. 如此循环下去,直到只有一个人的值为0
4. 获得此人在数组中的下标,加1之后输出,即为所求
package
Test;
public
class
Main {
public
static
void
main(String[] args) {
int
[] person
=
new
int
[
10
];
for
(
int
i
=
0
; i
<
person.length; i
++
) {
person[i]
=
0
;
}
for
(
int
j
=
0
, count
=
0
, leave
=
person.length; leave
!=
1
; j
=
(j
+
1
)
%
(person.length)) {
if
(person[j]
==
1
) {
continue
;
}
else
{
count
++
;
if
(count
%
3
==
0
) {
person[j]
=
1
;
leave
--
;
}
}
}
for
(
int
i
=
0
; i
<
person.length; i
++
) {
if
(person[i]
==
0
) {
System.out.println(
"
The last person is
"
+
(i
+
1
));
return
;
}
}
}
}
马嘉楠
jianan.ma@gmail.com
posted on 2006-11-08 18:05
马嘉楠 阅读(407)
评论(0) 编辑 收藏 所属分类:
SoureCode