题目描述:n个人坐成一圈,从第一个人开始,每次数到3的离开圈子,请问留下的最后一个人是谁?
public class Test1 {
/*题目:
n 个人坐成一圈,第一个人开始数数,数到三的人离开圈子,请问最后留下的人是第一个人。
* */
public static void main(String args[]){
autido(9);
}
public static void autido(int n){
int[] arr = new int[n];
for(int i=0;i<n;i++){
arr[i]=i+1;
}
doit(arr);
}
public static void doit(int[] arr){
int[] NewArr = new int[arr.length-1];
if(arr.length>=3){
for(int i=3,y=0;i < arr.length;i++,y++){
NewArr[y]=arr[i];
}
NewArr[arr.length-3]=arr[0];
NewArr[arr.length-2]=arr[1];
arr=NewArr;
doit(arr);
}
else{
System.out.println(arr[1]);
}
}
}
解题思路:将所有人装进一个数组arr,创建一个新的数组NewArr,长度比原数组少1,新数组NewArr的赋值由旧数组arr的第四位开始依次赋值,最后两位是arr的前两位。如此依次循环,直到新数组长度2。输出新数组的第二个数即为所求数。