不懂搜索,需求都说不清楚,建议报个语文班,认真思考一下人生,这个世界不是只有IT这个行业的,不适合的会很痛苦的。
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
就在博客园里面就有的题目,都有人写过了。
网上都是1啊,他说要打印7,唉......~~~~
狂暴一击,绝对有5000点伤害
@promise_j:
人家不知道你心里在想啥,前因后果,你做过啥,有啥疑问。
问问题要尽可能清楚明白。
按照题目,任何数字都是只有唯一解的。
那么问题来了,
如果面试官给你出个题目,
请你到街上找20个不超过30岁的男人,
请设计一个抽奖算法,保证最后中奖的人是女生。
你会咋想?
所以几种可能,你看错题目了,别人出错题目了。
别人故意的,就是看你能不能提出来这个错了。
是让答题的人写代码?
对
11人应该是打印1吗,怎么会打印7
表示不懂
估计是写1的时候不小心出头了,就变成7了
如果问题是最后留下的是第几号的那位,那结果确实是跟原题一致的。这个是我算的出队顺序36915A4B827,A代表10,B代表11。
<?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);
?>
该题是经典的约瑟夫环问题,
思路如下:
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
谢谢
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) + "号");
}
}