锁定老帖子 主题:淘宝面试题 n个人围成一圈,报到m的人出列
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-19
这是一个约瑟夫环问题,下面给出了java实现的例子: package com.juziku; import java.util.Arrays; /** * n个人围成一圈,报到m的人出列 * @author sunlightcs * 2011-3-8 * http://hi.juziku.com/sunlightcs/ */ public class Queue { public static void main(String[] args) { queue(10, 3); } /** * 最后出队的人 * @param total 总的人数 * @param num 第几号出队 */ public static void queue(int total, int num){ //定义一个数组,true表示没有出队列的,false表示已经出队列的 boolean []arr = new boolean[total]; Arrays.fill(arr, true); //移动变量,如:1 2 3 1 2 3 1 2 int next = 1; //数组下标 int index = 0; //剩下的人数 int count = total; //如果剩下的人数为1人时,停止报数 while(count>1){ if(arr[index] == true){ if(next == 3){ arr[index] = false; //剩下的人数减1 --count; //移动变量复位,从1开始报数 next = 1; System.out.println("依次出列的人为:"+(index+1)); }else{ ++next; } } ++index; if(index == total){ //数组下标复位,从0开始新重遍历 index = 0; } } for(int i=0; i<total; i++){ if(arr[i] == true){ System.out.println("最后出列的人为:"+(i+1)); } } } } 全文请访问:http://www.juziku.com/wiki/272.htm 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-04-19
很基本的数据结构问题了
|
|
返回顶楼 | |
发表时间:2011-04-19
你传进去的参数num怎么没有用到呢?
|
|
返回顶楼 | |
发表时间:2011-04-19
还可以用双向链表来直接模拟删除,直到元素的个数小于m,就节省
|
|
返回顶楼 | |
发表时间:2011-04-20
jialeadmin 写道 很基本的数据结构问题了
是的了。其实,很复杂的东西,也是由这些很基础的东西,引申出来的。 |
|
返回顶楼 | |
发表时间:2011-04-20
09108082 写道 你传进去的参数num怎么没有用到呢?
是的了,应该要把if(next == 3){ 这里的3改成num |
|
返回顶楼 | |
发表时间:2011-04-20
if(arr[index] == true){
|
|
返回顶楼 | |
发表时间:2011-04-20
做过这个,刚毕业面试的时候,后面去面试其他应聘者,公司也出过这个T,记得刚毕业做的时候是用两个链表和递归实现的,后来没有深究,考面试者也仅仅是看能不能运行和代码量!
|
|
返回顶楼 | |
发表时间:2011-04-20
useryouyou 写道 if(arr[index] == true){
这个有问题吗? |
|
返回顶楼 | |
发表时间:2011-04-20
sunlightcs 写道 useryouyou 写道 if(arr[index] == true){
这个有问题吗? 没问题,不过他想表达的意思是:一般判断true或false,不用“ == ”,直接if(arr[index])就可以了 |
|
返回顶楼 | |