锁定老帖子 主题:淘宝面试题 n个人围成一圈,报到m的人出列
精华帖 (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 |
|
返回顶楼 | |
发表时间:2011-04-21
有一个小小的疑问:为什么不直接用 if(arr[index]),而非要用if(arr[index] == true)呢?
|
|
返回顶楼 | |
发表时间:2011-04-21
明白了~
|
|
返回顶楼 | |
发表时间: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; } |
|
返回顶楼 | |
发表时间:2011-04-22
qrg 写道 有一个小小的疑问:为什么不直接用 if(arr[index]),而非要用if(arr[index] == true)呢?
习惯问题, |
|
返回顶楼 | |
发表时间:2011-04-22
最后修改:2011-04-22
哈哈,又见数据结构了
关于题目,有点不明:报到M,意思是说M出列后又从1开始报? |
|
返回顶楼 | |
发表时间:2011-04-22
Simon.C 写道 哈哈,又见数据结构了
关于题目,有点不明:报到M,意思是说M出列后又从1开始报? 是这个意思了。 |
|
返回顶楼 | |
发表时间: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--; } } |
|
返回顶楼 | |