Oo缘来是你oO


posts - 120,comments - 125,trackbacks - 0

                                   一道很简单的老问题,求更好的解决方法

                                            马嘉楠   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

只有注册用户登录后才能发表评论。


网站导航: