我日 最讨厌算法题.......看的我蛋疼...
for(int i=1;i<50;i++){
int s=2;
if(i==3)
s++;
}
return s;
package test;
public class testMain {
/**
* @param args
* @other
* @author Kevin
*/
private static int[] tempArr = new int[50];
public static void main(String[] args) {
count(tempArr);
}
private static void count(int[] arr) {
int k = 0;
int j = 0;
for (int i = 0; i < tempArr.length; i++) {
if (tempArr[i] == 0) {
k++;
if (k % 3 == 0) {
tempArr[i] = 1;
j = i;
}
}
}
int result = 0;
for (int i = 0; i < tempArr.length; i++) {
if (tempArr[i] == 0) {
result++;
}
}
if (result > 2) {
count(tempArr);
} else {
System.out.println("最后一个退出的是第" + j + "个人。");
}
}
最后输出的J要+1, 忘了。。。
}
int[] a = {1,2,3...50};
public static void kill(a) {
int non-zeor-index = a.non-zeor;//找到第一个非0
int count = 0;
for (int i = non-zeor-index; i < a.lenght;i++) {
if (a[i] == 0){}; // 如果是0,下一个
else {
if( count % 3 == 0) {a[i] = 0; count = 0;}//如果第三个,抹去
else {count++;}//否则继续往后
}
}
kill (a);
}
当然这是最慢的方法,可以考虑直接继续按结果
对于一般的,有个给你参考,2个一杀的情况有
j(1)=1;
j(2n) = 2j(n)-1; n为偶数
j(2n+1) = 2j(n) + 1; n为奇数