500个小孩子,手拉手围成一个圈,
从1开始数,每数到3的时候,那第3个小孩子退出圈,
让后又从1开始点数,循环下去,问最后留下的那个小孩子,
是500个小孩的第几个
------解决方案--------------------
刚才那个性能不大好哦,呵呵
- Java code
import java.util.LinkedList;import java.util.List;public class Temp{ public static void main(String args[]) { System.out.println(getLastOne(500, 3)); } public static int getLastOne(int length, int del) { List<Integer> list = new LinkedList<Integer>(); for(int i = 1; i <= length; i++) { list.add(i); } while(list.size() > 1) { delOne(list, del); } return list.get(0); } public static void delOne(List<Integer> list, int del) { for(int i = 0; i < del - 1; i++) { list.add(list.get(i)); } for(int i = 0; i < del; i++) { list.remove(0); } }}
------解决方案--------------------
- Java code
import java.util.*;public class TestCollection{ public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); for (int i = 1; i <= 500; i++) { list.add(i); } int k = 0; while (list.size() > 1) { if (k >= list.size()) k = list.size() - 1; if (k > list.size() - 3) { k = k + 2 - list.size(); } else { k += 2; } System.out.println(list.get(k)); list.remove(k); } System.out.println("It's me!" + list.get(0)); }}