首页 新闻 会员 周边

java有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出

1
悬赏园豆:50 [已解决问题] 解决于 2016-03-03 17:19

要求:11个人中打印7

    14个人中打印2

promise_j的主页 promise_j | 初学一级 | 园豆:157
提问于:2016-03-03 12:48
< >
分享
最佳答案
3

不懂搜索,需求都说不清楚,建议报个语文班,认真思考一下人生,这个世界不是只有IT这个行业的,不适合的会很痛苦的。

有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

就在博客园里面就有的题目,都有人写过了。

收获园豆:40
爱编程的大叔 | 高人七级 |园豆:30839 | 2016-03-03 15:46

网上都是1啊,他说要打印7,唉......~~~~

promise_j | 园豆:157 (初学一级) | 2016-03-03 15:47

狂暴一击,绝对有5000点伤害

Rich.T | 园豆:3440 (老鸟四级) | 2016-03-03 15:49

@promise_j: 

人家不知道你心里在想啥,前因后果,你做过啥,有啥疑问。

问问题要尽可能清楚明白。

 

按照题目,任何数字都是只有唯一解的。

 

那么问题来了,

如果面试官给你出个题目,

请你到街上找20个不超过30岁的男人,

请设计一个抽奖算法,保证最后中奖的人是女生。

你会咋想?

 

所以几种可能,你看错题目了,别人出错题目了。

别人故意的,就是看你能不能提出来这个错了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2016-03-03 16:01
其他回答(8)
0

你的问题呢?你的要求完全看不懂

Daniel Cai | 园豆:10424 (专家六级) | 2016-03-03 13:23

java有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出,

要求:11个人中打印7

    14个人中打印2

一家公司的机试题

支持(0) 反对(0) promise_j | 园豆:157 (初学一级) | 2016-03-03 14:57
0

是让答题的人写代码?

吴瑞祥 | 园豆:29449 (高人七级) | 2016-03-03 15:27

支持(0) 反对(0) promise_j | 园豆:157 (初学一级) | 2016-03-03 15:45
-1

11人应该是打印1吗,怎么会打印7

Rich.T | 园豆:3440 (老鸟四级) | 2016-03-03 15:33

表示不懂

支持(0) 反对(0) promise_j | 园豆:157 (初学一级) | 2016-03-03 15:46
0

估计是写1的时候不小心出头了,就变成7了

刘宏玺 | 园豆:14020 (专家六级) | 2016-03-03 16:45
0

如果问题是最后留下的是第几号的那位,那结果确实是跟原题一致的。这个是我算的出队顺序36915A4B827,A代表10,B代表11。

收获园豆:10
军长_cnblogs | 园豆:18 (初学一级) | 2016-03-03 16:52
0

<?php
$aa=array();
$aa[0]=1;
$aa[1]=2;
$aa[2]=3;
$aa[3]=4;
$aa[4]=5;
$aa[5]=6;
$aa[6]=7;
$aa[7]=8;
$aa[8]=9;
$aa[9]=10;
$aa[10]=11;
$aa12=1;
do {
$aacount=count($aa);
for($input =0;$input<$aacount;$input++)
{
if(($input+$aa12)%3==0)
{
echo $aa[$input];
unset($aa[$input]);
}
}
$aa1=array();
foreach($aa as $test)
{
array_unshift($aa1,$test);
}
$aa=array();
foreach($aa1 as $test1)
{
array_unshift($aa,$test1);
}
$aa12=$aacount%3+$aa12;
} while (count($aa) > 0);
?>

Gavin Guo | 园豆:202 (菜鸟二级) | 2016-03-04 16:33
0

该题是经典的约瑟夫环问题,

思路如下:

1)首先,把数据填充到数组或链表中;

2)用一个while循环进行出圈,直到只剩下一个元素留下。

用Java实现的代码如下:

package com.buju;

import java.util.*;  
public class YueSeFu {  
      
    public static int cycle(int total,int k){  
        List<Integer> dataList = new LinkedList<Integer>();//创建一个链表  
        for(int i=0;i<total;i++) //添加数据成员  
            dataList.add(new Integer(i+1));  
        int index=-1;  
        //循环  
        while(dataList.size()>1){  
            index  = (index+k)%dataList.size();//以(index+k)对size()取余  
            dataList.remove(index--);  
        }  
        return ((Integer)dataList.get(0).intValue());//返回它的值  
    }  
      
    public static void main(String[] args) {  
        System.out.println("该人原来的位置是: "+cycle(11,3));  
        System.out.println("该人原来的位置是: "+cycle(14,3));
    }  
  
}  

参考地址:http://blog.csdn.net/sanqima/article/details/36177281

sanqima | 园豆:202 (菜鸟二级) | 2016-03-06 16:16

谢谢

支持(1) 反对(0) promise_j | 园豆:157 (初学一级) | 2016-03-06 20:23
0

public class Test {
public static void main(String[] args) {

    // 测试数据
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    list.add(6);
    list.add(7);
    list.add(8);
    list.add(9);
    list.add(10);
    list.add(11);
    list.add(12);
    list.add(13);
    list.add(14);

    int i = 0;

    // 移除相关元素
    while (list.size() != 1) {

        i += 2;

        if (i == list.size()) {
            i = 0;
        }

        if (i == list.size() + 1) {
            i = 1;
        }

        if (i == list.size() + 2) {
            i = 2;
            if (list.size() == 2){
                i = 0;
            }
        }
        Integer remove = list.remove(i);
        System.out.println("移除"+remove+"号");
    }

    System.out.println("最后剩下的人是" + list.get(0) + "号");
}

}

明灭 | 园豆:202 (菜鸟二级) | 2020-05-24 23:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册