题目:
* 游戏,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来表示。