有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
我的思路就是输入的n把他从1到n输入到数组里去,然后最后剩下的人的序号就是数组仅剩的一个数。
具体看代码
希望有更好办法的请细嗦!
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int arr[] = new int [n];
for(int i=0;i<n;i++) {
arr[i]=i+1;
}
int k=0;//用k控制数到第几个了
while(n!=1) {
for(int i=0;i<n;i++) {
k++;
if(k==3) {
for(int j=i;j<n;j++) {//当k=3时将后面的数等于前面的数然后将k=3时的arr[i]给删除
if(j==n-1) {
break;//用来控制不超过长度
}else {
arr[j]=arr[j+1];
}
}
n=n-1;//删除后总长度减1
k=k-3;//重新开始数
i--;//因为当前数已经删除所以需要将i调为删除的前一个数
}
}
}
System.out.println(arr[n-1]);//也可以直接写arr[0]
sc.close();
}