最近又要开始找工作了,打算每天做一道算法题,为面试准备
题目: 一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号
我的解法
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
int[] arr = new int[]{1,2,3,4,5,6};
int j = 5;
int i = 1;
int w = 1;
int count = 0;
while(true){
if(count >= arr.length){
break;
}
int index = (i - 1) % arr.length;
if(arr[index] != 0){
if(w % j == 0){
list.add(arr[index]);
arr[index] = 0;
count++;
}
w++;
}
i++;
}
list.stream().forEach(f-> System.out.println(f));
}
如果你有更好的解法,可以给我留言