题目:n个人站成一圈,从1开始报数,当报到第500个人时,在从第一个人开始接着报501。当报到m或m的倍数时踢出,当只剩下1人时,他原来在什么位置
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入人数:");
int n = scanner.nextInt();
System.out.println("请输入倍数:");
int m = scanner.nextInt();
int num=n; //还活着的人
int number =0 ; //报数
boolean[] a = new boolean[n]; //布尔类型数组默认是false
int tab = 0; //下标
while(num > 1){
if(!a[tab]){ //判定该位置是否被踢出
if((++number) % m == 0){
a[tab] = true;
num--;
}
}
tab++;
tab = tab%n; //当报到最后个人时下一个从头开始报
}
for(int k=0 ; k<n ;k++){
if(!a[k]){
System.out.println("剩下的人原来在" + "第" + (k+1) + "个位置");
}
}
}
例:输入500个人,倍数为3