圆圈上顺时针列着1,2,3...n这n个数,从1开始,顺时针隔一个拿走一个(1最先被拿走,下一个是3拿走) 问最后剩下的是哪一个数字
public static void main(String[] args) {
System.out.println("请输入数字N(大于0):");
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int a[] = new int[n];
for (int i = 0; i < n; i++) {//初始化为1
a[i] = 1;
}
int count = 0;//用来记录已经拿走了几个
int temp = 0; //用来记录中间隔了几个
boolean notEnd = true;//用来标识是否结束
for (int j = 0; notEnd; j++) {//一直遍历数组
if (j >= n) {//当超过时,返回最小的
j = j % n;
}
while (a[j] != 1) {//如果下一个不是1,则一直向下找到为1的
j++;
if (j >= n) {
j = j % n;
}
}
temp++;
if (temp == 2) {//等于2时,说明当前已经过了一个1,所以把当前数组置为0
a[j] = 0;
temp = 0;
count++;
if (count == n) {//完成
notEnd = false;
System.out.println(j==0?n:j);//n=4,8时
}
}
}
}