将从1开始依次增加的n个整数(n为[1,52]之间的整数),以给定的顺序顺时针围成一个圆圈。在这个圆圈中找到数字1并将其移出圆圈,然后顺时针寻找下一个除4余2的数字并将其移出圆圈,然后顺时针寻找下一个除4余3的数字并将其移出圆圈,然后顺时针寻找下一个能被4整除的数字并将其移出圆圈,然后顺时针寻找下一个除4余1的数字并将其移出圆圈……最后“圆圈”只会剩下一个数字,返回这个数字的值。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
示例1
输入例子:
[2,4,1,3]
输出例子:
4
示例2
输入例子:
[9,8,7,6,5,4,3,2,1]
输出例子:
9
解析:首先需要将输入的整数列表转换为一个数组,然后使用循环遍历数组,按照题目要求的规则依次移除数字。最后返回剩下的数字。
Java代码如下:
public class Circle {
public static void main(String[] args) {
int[] input = {2, 4, 1, 3};
System.out.println(findLastNumber(input));
}
public static int findLastNumber(int[] nums) {
int[] arr = nums;
int index = 0;
while (arr.length > 1) {
index = (index + 2) % arr.length;
arr = removeElement(arr, index);
index = (index + 3) % arr.length;
arr = removeElement(arr, index);
index = (index + 4 - 1) % arr.length;
arr = removeElement(arr, index);
index = (index + 1) % arr.length;
arr = removeElement(arr, index);
}
return arr[0];
}
public static int[] removeElement(int[] arr, int index) {
int[] newArr = new int[arr.length - 1];
for (int i = 0, j = 0; i < arr.length; i++) {
if (i != index) {
newArr[j++] = arr[i];
}
}
return newArr;
}
}