一道很简单的老问题,求更好的解决方法
                                            马嘉楠   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 
马嘉楠 阅读(431) 
评论(0)  编辑  收藏  所属分类: 
SoureCode