Java面试基础题

来源:百度知道 编辑:UC知道 时间:2024/07/07 12:03:00
50 个人围成一圈,从1 开始数数,数3 或 3 的倍数的人除去,剩下的人接着数,直到不再有人剔除。打印剩下人的编号。
貌似答案只剩下一个人吧,但是剩下的号码是什么我不知道。 另外,我接到好几个版本的,答案为不统一……希望高手给出慎重考虑代码我已经很难分辨了……

第11个人是最后剩下的。
public class Count3Quit {
public static void main(String[] args) {
boolean[] arr = new boolean[50];
for(int i = 0; i<arr.length ; i++) {
arr[i] = true;
}
int leftCount = arr.length;
int countNum = 0;
int index = 0;
while (leftCount > 1) {
if(arr[index]== true) {
countNum++;
if(countNum==3) {
countNum = 0;
arr[index] = false;
leftCount--;
}
}
index++;

if(index == arr.length) {
index = 0;
}
}
for(int i = 0; i<arr.length; i++) {
if(arr[i]==true) {
System.out.println(i);
}
}
}
}

是的,最后只剩下一个人。那个人就是第11号。

static void josegh(int[] a,int m)
{
int n=a.length;
int out=0;
int i=0;
while(out<n)
{
for(int j=0;j<m;)
{
if(a[(i++)%n]!=0)
{
j++;
}
}
System.out.print