出圈问题
题目:50个人围城一圈数到3和3的倍数时出圈,问剩下的人是谁?原来的位置是多少?
重复循环使用取余的方法:
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 }