//10个小孩子,围成一个圈,从第2个开始数数,每次数到3的孩子就离开圈,然后继续数。 public class KKK { public static void main(String[] args) throws InterruptedException { int[] num = { 2, 3, 4, 5, 6, 7, 8, 9, 10,1 }; //PS:一个圆圈,第二个和第一个其实是可以转换,就把2号小孩子排第一位上去就好了 int x = num.length; //圈内的小孩子数量 int count = 0; int i = 0; int[] y=null , z; while (true) {//因为我们是间隔取值,所以虽然知道数组长度,但是咱们不知道要循环几次,用死循环 if (x == 0) { break;//判断要是所有小孩子全部出圈了就结束死循环 } if (y==null) { y=new int[x]; } int l=num[i]; count++;//对循环进行计数 i++; if (count == 3) { System.out.print(l+" ");//当循环三次,也就是数了三次,就把这个提出来 x--;//圈内的小孩子减去一个 count = 0;//循环计数器归零方便下次使用 }else { y[i-1]=num[i-1];//当计数器不是三的值放到新的数组进去 } if (i == num.length) {//判断数数是否数完一圈了 int k=0; for (int j = 0; j < y.length; j++) {//次循环用于统计圈内还剩余多少个小孩子 if (y[j]!=0) { k++; } } z=new int[k]; k=0; for (int j = 0; j < y.length; j++) {//把剩余的值重新组一个数组 if (y[j]!=0) { z[k]=y[j]; k++; } } num=z;//用剩余的小孩子组成的圈继续回去循环 i = 0; y=null; } } } }
//下面的这个类是上面的升级版,可以随意定义圈内孩子数量,从第几个开始数,每次数几个 //要是看不懂,就先吧上面的弄懂了再来看。参照上面注解应该能看懂的 import java.util.Scanner; /** * a 个小孩子,围成一个圈,从第 b 个开始数数,每次数到 c 的孩子就离开圈,然后继续数。 * * @author Desen_Z */ public class KKK { public static void main(String[] args) throws InterruptedException { System.out.println("请输入小组人数"); int a = new Scanner(System.in).nextInt(); int b; int c; while (true) { System.out.println("请输入从第几位开始"); b = new Scanner(System.in).nextInt(); if (b <= a) { break; } System.out.println("输入有误,请重新输入"); } while (true) { System.out.println("请输入间隔数"); c = new Scanner(System.in).nextInt(); if (c <= a) { break; } System.out.println("输入有误,请重新输入"); } int[] a1 = new int[a]; for (int i = 0; i < a; i++) { a1[i] = i + 1; } int[] b1 = new int[a]; int q = 0, p = b1.length - b; for (int i = b - 1; i < b1.length; i++) { b1[q] = a1[i]; q++; } for (int i = 0; i < b - 1; i++) { b1[q] = a1[i]; q++; } int[] num = b1; int x = num.length, count = 0, i = 0; int[] y = null, z; while (true) { if (x == 0) { break; } if (y == null) { y = new int[x]; } int l = num[i]; count++; i++; if (count == c) { System.out.print(l + " "); x--; count = 0; } else { y[i - 1] = num[i - 1]; } if (i == num.length) { int k = 0; for (int j = 0; j < y.length; j++) { if (y[j] != 0) { k++; } } z = new int[k]; k = 0; for (int j = 0; j < y.length; j++) { if (y[j] != 0) { z[k] = y[j]; k++; } } num = z; i = 0; y = null; } } } }