重复循环使用取余的方法:
1 import java.util.LinkedList;
2 import java.util.List;
3
4
5 public class Main {
6 public static void main(String[] args) {
7 System.out.println("该数字原来的位置是:" + cycle(50, 3));
8 }
9
10 public static int cycle(int total, int k){
11 List<Integer> dataList = new LinkedList<>();
12 for(int i = 0; i< total;i++){
13 dataList.add(i+1);
14 }
15 int index = -1;
16
17 while(dataList.size() > 1){
18 index = (index + k) % dataList.size();
19 /*
20 * 当删除一个元素后,由于dataList中后面元素的下标都减一,所以index也需要减一
21 * 元素为: 1 2 3 4 5 6 7
22 * 下标为 : 0 1 2 3 4 5 6 index=2时,删除第3个元素
23 * 下标变为 0 1 2 3 4 5 index需要退回删除元素的前一个位置所以(index--)
24 *
25 */
26 dataList.remove(index--);
27 }
28 return dataList.get(0);
29 }
30 }