有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的哪位。
解题思路:
- 报数为1,2的移到数组的末尾
- 报数为3的从数组中删除
- 当数组中只剩一个玩家时退出,该玩家则是胜利者
在这里插入代码片
public class Game {
public static void main(String[] args) {
int index = countThree(10,0,3);
(index);
}
/**
*
* @param sum 总人数
* @param start 开始游戏玩家的编号
* @param num 念到该数字退出游戏
* @return
*/
private static int countThree(int sum, int start, int num) {
//初始化数据
int array[] = new int[sum];
for (int i = 0; i < sum; i++) {
array[i]=i+1;
}
//while循环到只剩一个人的时候退出
while ( > 1){
for (int i = 0; i < num - 1; i++) {
//将念到1或者2的玩家移到数组的末尾
moveArray(array);
}
//删除念到3的玩家,并返回一个新的数组
int[] newArray = deleteArray(array, start);
//将新的数据赋给原来的数组
array = newArray;
}
//返回获得胜利的玩家的编号
return array[0];
}
//把第一个元素移动到数组末尾
private static void moveArray(int[] array) {
int firstElement = array[0];
for (int j = 0; j < -1; j++) {
array[j] = array[j+1];
}
array[ -1] = firstElement;
}
//删除指定下标的元素
private static int[] deleteArray(int[] array, int index) {
int length = ;
int newArray[] = new int[length-1];
for (int i = 0; i < ; i++) {
if (i == index){
for (int j = i; j < -1; j++) {
newArray[j] = array[j+1];
}
}
}
return newArray;
}
}