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

认为自己很聪明的请进
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 关于这样的题目我有一个程序,可是似乎逻辑有问题,谁能看懂程序意思并找出问题?(程序写的不好所以比较难看明白)
public class Test37 {

public static void main(String[] args) {
int i,y,m=0;
i = Integer.parseInt(args[0]);
for(int x=1;x<i+1;x++){
y = x;
while(i!=2&&x%3!=0){
x = i%3+x;
i = i-i/3;
if(i==2&&(x+2)%3!=0)
System.out.println(y);
}
}
}

}

------解决方案--------------------
如果是josephsus環,不用那麼長的代碼,concrete mathematics上有詳細介紹...
public static void josephsus(int n) {
int re = 1;
for (int i = 0; i < Integer.bitCount(n) ; ++i) {
re <<= 1;
}
System.out.println(re - 1 + " survived.");
}
但樓主的意思好像不是josephsus