import java.util.*;
class BaoShu00 
{
public static void main(String[] args) 
{
System.out.println("请输入n的值:");
Scanner  s0 =  new Scanner(System.in);
int n = s0.nextInt();
int shuzu[]=new int[n];
int i=0;
for(i=0;i<shuzu.length;i++){
shuzu[i]=i+1;
System.out.println(i);
}
 i=0;
while(n>1){
for (int j=1;j<=3;j++){
int k=1;
if(j==1){
while(k!=0){
if(shuzu[i]<n){
k=0;
}
i++;
if(i==n){
i=0;
}
}
}
if(j==2){
while(k!=0){
if(shuzu[i]<n){
k=0;
}
i++;
if(i==n){
i=0;
}
}
}

if(j==3){
while(k!=0){
if(shuzu[i]<n){
shuzu[i]+=n;
k=0;
n--;
}
i++;
if(i==n){
i=0;
}
}
}
}
}
for (int i=0;i<n ;i++ ){
if(shuzu[i]<n){
int l=i+1;
System.out.println("第"+l+"位留下了");
}
}
}
}

解决方案 »

  1.   

    这是java50题里面的一道吧。
    当初我刚开始学java的时候也挨个的做了一遍。
    错误你对比java50题的那个,应该能找出来你的错误。
    位置应该在第40道左右
      

  2.   

    写的好乱啊,你的格式改成java的撒,也好看点,这都看不清楚哪个在哪个里面,还有你问题也不清楚撒,从一开始报到三的人退出,然后还有人咋搞捏。代码内容也好乱啊一点注释都没得,看这就晕了,初步判断感觉你那个while(n>1)你的跳出条件是n=0,所以你你运行根据输入n的不同会有两个情况,一个是在最后那个
    while(k!=0){
    if(shuzu[i]<n){
    shuzu[i]+=n;
    k=0;
    n--;
    }
    i++;
    if(i==n){
    i=0;
    }
    }
    在这个里面循环挑不出来,因为你这个数组里面没有比n小的了,或者是跳出来了但是这个时候n=0所以你最后那个输出循环i初值是0他根本就不会执行了。
    因为不知道你到底是有什么要求,而且你这代码我感觉真有点乱了,所以不太好帮你改了....
      

  3.   

    谢谢大神指点,已经明白了,是把n重复利用了,把n改成shuzu.length,最后输出部分改成下面的就可以了
    for (i=0;i<shuzu.length ;i++){
    if(shuzu[i]<=shuzu.length){
    System.out.println("最后留下的是原来的第"+shuzu[i]+"位");
    }
    }
      

  4.   

    LZ的代码看的好晕。
    可以考虑用队列来做import java.util.concurrent.LinkedBlockingQueue;/**
     * 报3出局
     *
     */
    public class Test06 {
    public static void main(String[] args) {
    int number = getLastPeopleNumber(100);
    System.out.println("最后一个人的编号为:" + number);
    }

    /**
     * 
     * @param n  人数,编号范围为1-n
     * @return 最后一个人的编号
     */
    static int getLastPeopleNumber(int n) {
    //初始化
    LinkedBlockingQueue<Integer> peopleQueue = new LinkedBlockingQueue<>();
    for(int i = 1;i <= n;++i) {
    peopleQueue.add(i);
    }
    //报到3的出局,否则插入到队列末端,直到队列长度为1
    int index = 1;
    while(peopleQueue.size() > 1) {
    if(index % 3 == 0) {
    peopleQueue.remove();
    index = 1;
    }else {
    peopleQueue.add(peopleQueue.remove());
    ++index;
    }
    }
    return peopleQueue.remove();
    }
    }