日期:2014-05-20  浏览次数:20646 次

求大神改改代码,小弟实在没有办法了,就是N个人站一圈,报数从1开始报到3的人退出。答案看过了,但是不清楚自己的哪里错了,求批改
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+"位留下了");
}
}
}
}

------解决方案--------------------
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