import java.util.ArrayList; import java.util.List; /* * 1,2,3,4,5,6,7...n个人围成一个圈,然后进行1,2,3报数, * 当某个人报到3,站出来,后面的人继续报数,报到3就站出来,直至最后一个人。 * * 方法一:递归; * 方法二:链表; * 方法三:自己编写。 * */ public class BaoShuDemo { //i可以理解为容器里面每个数的脚码(0,1,2...);amount则为报数;x为按1至x报数(如按1,2,1,2报数) List listNum = new ArrayList(); StringBuffer strNum = new StringBuffer(); public void baoshu(int total, int x) { for (int i = 0; i < total; i++) { listNum.add(i + 1); } for (int i = 0, amount = 1; listNum.size() > 1; i++, amount++) { if (i >= listNum.size()){ i %= listNum.size(); System.err.println("当前的i为 " + i); } if (amount % x == 0) { strNum.append(listNum.get(i) + " "); listNum.remove(i); amount = 1; } } System.out.println(strNum.toString()+listNum.get(0)); } public void baoshu2() { int total = 9; for (int i = 0; i < total; i++) { listNum.add(i + 1); } int i = 0, amount = 1, x = 2; while (listNum.size() > 0) { if (i >= listNum.size()){ } } i %= listNum.size(); } if (amount % x == 0) { strNum.append(listNum.get(i)+" "); x = listNum.get(i); listNum.remove(i); amount = 1; } if (x != 1)// 如果x==1则不用继续报数,下个人直接退出 i++; amount++; } System.out.println(strNum.toString()); public static void main(String[] args) { new BaoShuDemo().baoshu2(); } 本文来源:https://www.wddqw.com/doc/429b3fd99ec3d5bbfd0a74bb.html