题目:
* 游戏,N个人围城一圈,编号1到N;
* 从1开始,逢三或者逢三的倍数就退出,剩下的继续,知道剩下一个人。
* 求这个人的编号是多少?
/** * @File WStest_PlayGame3mod.java * @date 2015年5月17日 * @auther Fzu_Xmu_bmw */ /** * 游戏,N个人围城一圈,编号1到N; * 从1开始,逢三或者逢三的倍数就退出,剩下的继续,知道剩下一个人。 * 求这个人的编号是多少? */ public class WStest_PlayGame3mod { public static void main(String[] args) { new WStest_PlayGame3mod().run(); } public void run() { int[] Test = new int[50]; int[] Test2 = {1,2,3,4,5,6,7,8,9,10}; for (int i = 0; i < Test.length; i++) { Test[i]=i+1; } for (int e : Test) { System.out.print(e+" "); } System.out.println(""); int[] Temp = Game(Test); for (int e : Temp) { if (e!=0) { System.out.print(e+";"); } } System.out.println(""); for (int e : Test2) { System.out.print(e+" "); } System.out.println(""); Temp = Game(Test2); for (int e : Temp) { if (e!=0) { System.out.print(e+";"); } } } public int[] Game(int[] arr) { int arrLength = arr.length; if (arrLength<2) { return arr; } int flag=0,i=0,j=arrLength; while (j>1) { if(arr[i]!=0){ flag++; if (flag%3==0) { arr[i]=0; j--; } } i++; if (i==arrLength) { i=0; } } return arr; } }
程序说明:当相应编号的参与者出局就设其值为0来表示。