首先,建立一个数组array,长度为孩子的数量。 数组的每个元素的值,就是孩子的位置编号,从1开始编号。
第二,建立一个统计变量count,计算当前数组中还剩余的孩子的数量。
第三,若剩余人数大于1,则孩子们,开始报数。
第四,若某个孩子,报出了关键数字,则将count-1,然后将array[该孩子的下标] = 0,即报出关键数字的孩子,将离开,咱们把他的号码,置为0,就意味着他离开了。
第五,只有号码不为0的孩子,才可以参与报数。
第六,建立一个报数时需要使用的变量temp,用于保存当前孩子需要报的数字。
第七,最后,数组中,元素值不为0的那个元素,就是剩下的那个孩子的,编号。
废话少说,看代码:[code=java]package org.cxy.demo;
public class Children {
private int[] child;
private int count;
public Children(int max){
this.child = new int[max];
for(int i=0;i<this.child.length;i++){
this.child[i] = i+1;
this.count++;
}
}
public int quitByNumber(int number){
int temp = 1;
// 若剩余的孩子数大于1,则游戏继续。
while(this.count>1){
for(int i=0;i<this.child.length;i++){
if(this.child[i]!=0){
System.out.printf("第 %d 个孩子,报数为:%d\n",this.child[i],(temp%number == 0 ?number:temp%number));
if(temp%number == 0){
System.out.printf("哦啊,第 %d 个孩子,离开了!\n",this.child[i]);
this.child[i] = 0;
this.count--;
}
temp++;
}
}
}
for(int i=0;i<this.child.length;i++){
if(this.child[i]!=0){
return this.child[i];
}
}
return -1;
}
public static void main(String[] args) {
Children c = new Children(13);
System.out.printf("最终留下来的是第 %d 个孩子!\n",c.quitByNumber(3));
}
}[/code]程序执行结果:[code=java]第 1 个孩子,报数为:1
第 2 个孩子,报数为:2
第 3 个孩子,报数为:3
哦啊,第 3 个孩子,离开了!
第 4 个孩子,报数为:1
第 5 个孩子,报数为:2
第 6 个孩子,报数为:3
哦啊,第 6 个孩子,离开了!
第 7 个孩子,报数为:1
第 8 个孩子,报数为:2
第 9 个孩子,报数为:3
哦啊,第 9 个孩子,离开了!
第 10 个孩子,报数为:1
第 11 个孩子,报数为:2
第 12 个孩子,报数为:3
哦啊,第 12 个孩子,离开了!
第 13 个孩子,报数为:1
第 1 个孩子,报数为:2
第 2 个孩子,报数为:3
哦啊,第 2 个孩子,离开了!
第 4 个孩子,报数为:1
第 5 个孩子,报数为:2
第 7 个孩子,报数为:3
哦啊,第 7 个孩子,离开了!
第 8 个孩子,报数为:1
第 10 个孩子,报数为:2
第 11 个孩子,报数为:3
哦啊,第 11 个孩子,离开了!
第 13 个孩子,报数为:1
第 1 个孩子,报数为:2
第 4 个孩子,报数为:3
哦啊,第 4 个孩子,离开了!
第 5 个孩子,报数为:1
第 8 个孩子,报数为:2
第 10 个孩子,报数为:3
哦啊,第 10 个孩子,离开了!
第 13 个孩子,报数为:1
第 1 个孩子,报数为:2
第 5 个孩子,报数为:3
哦啊,第 5 个孩子,离开了!
第 8 个孩子,报数为:1
第 13 个孩子,报数为:2
第 1 个孩子,报数为:3
哦啊,第 1 个孩子,离开了!
第 8 个孩子,报数为:1
第 13 个孩子,报数为:2
第 8 个孩子,报数为:3
哦啊,第 8 个孩子,离开了!
第 13 个孩子,报数为:1
最终留下来的是第 13 个孩子![/code] |