论坛首页 Java企业应用论坛

淘宝面试题 n个人围成一圈,报到m的人出列

浏览 20412 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2011-04-21  
albertshaw 写道
public int find(int n, int m)
	{
		int r = 0;
		for (int i = 2; i <= n; i++) {
			r = (r + m) % i;
		}
		return r + 1;
	}


以前在论坛里看到过一个实现,说实话我没看懂,但是试了几个都是正确的,希望数学好的朋友来解释下.

见:http://baike.baidu.com/view/717633.htm#sub717633
0 请登录后投票
   发表时间:2011-04-21  
有一个小小的疑问:为什么不直接用 if(arr[index]),而非要用if(arr[index] == true)呢?
0 请登录后投票
   发表时间:2011-04-21  

明白了~

 

0 请登录后投票
   发表时间:2011-04-21  

public static int find(int n, int m)
	{
		if(n==1)
			return 0;
		int r = 0;
		for (int i = (m-1)%n; i <= n; i++) {
			r = ((r + m)%n )% i;
		}
		return r + 1;
	}
 
0 请登录后投票
   发表时间:2011-04-22  
qrg 写道
有一个小小的疑问:为什么不直接用 if(arr[index]),而非要用if(arr[index] == true)呢?

习惯问题,
0 请登录后投票
   发表时间:2011-04-22   最后修改:2011-04-22
哈哈,又见数据结构了
关于题目,有点不明:报到M,意思是说M出列后又从1开始报?
0 请登录后投票
   发表时间:2011-04-22  
Simon.C 写道
哈哈,又见数据结构了
关于题目,有点不明:报到M,意思是说M出列后又从1开始报?

是这个意思了。
0 请登录后投票
   发表时间:2011-04-23  
这个之前自己写的,虽然不完全一样,但都差不多
public class MyCount3Quit{
public static void main(String[] agrs){
    KidCircle kid =new KidCircle(500);
    int n=kid.count(0,2);
    kid.delNext(n);
    while(kid.getLen()>1){
       n=kid.count(n,3);
       kid.delNext(n);
    }
    System.out.println(n);
}
}

class KidCircle{
   // private int[] kid;
    private int[] next;
    private int len;
    KidCircle(int i){
      len=i;
     // kid=new int[i];
      next=new int[i];
      for(int j=0;j<i-1;j++){
         //kid[j]=j;
         next[j]=j+1;
      }
      next[i-1]=0;
   }
  
   public int getLen(){return len;}
  
   public int length(){
       return len;
   }
  
   public int count(int n, int i){     //返回第I个人的位置
      for(int j=1;j<i;j++){
         n=next[n];
      }
      return n;
   }
  
   public void delNext(int i){
      next[i]=next[next[i]];
      len--;
   }
}
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics