问题 1047: [编程入门]报数问题
题目描述
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
输入
初始人数n
输出
最后一人的初始编号
样例输入
3
样例输出
2
分析:因为每次报3都会被踢出队列,当队列中只剩下一个人时,报数停止,所以可以使用数组来解决此题(约瑟夫环问题),当报3时将数组的数值赋0,踢出人数加一,直到只剩一人时停止。
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int a[] = new int[n];
int i=0;
for(i=0;i<n;i++){
a[i] = i+1;
}
int ko=0;
int num=0;
i=0;
while(ko!=n-1){
if(a[i]!=0)
num++;
if(num==3){
a[i]=0;
num=0;
ko++;
}
i++;
if(i==a.length)
i=0;
}
for(int j=0;j<a.length;j++){
if(a[j]!=0){
System.out.println(a[j]);
}
}
}
}