小红的完全平方数
就是输入是一个数,然后每次只能加2或者减2,求变成完全平方数的最小操作次数
示例1:
输入:4
输出:0
示例2:
输入:28
输出:4
解释:离28最近的完全平方数是25和36,所以最小操作次数是(36-28) / 2 = 4
解题思路
- 因为题目限制了
1 <= x <= 1000000000
,所以首先求出1000000000的平方根为31622.87,那么新建一个数组pingfang[31623]用来保存前31623个数的完全平方数 - 然后遍历,找到
target > pingfang[i] && target < pingfang[i + 1]
。因为只能加减2,所以如果target % 2 == pingfang[i] % 2,那么输出(int) ((target - pingfang[i]) / 2); - 否则输出(int) ((pingfang[i + 1] - target) / 2);
AC代码
public class Solution_蔚来_完全平方数 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int target = sc.nextInt();
//1,4,9,16,25,36,49,64,81
//完全平方数
//28 + 2+2+2+2=36,4
//只能加2减2,
long[] pingfang = new long[31623];
for (int i = 0; i < 31623; i++) {
pingfang[i] = i * i;
}
for (int i = 0; i < 31622; i++) {
if (target == pingfang[i]) {
System.out.println(0);
}
if (target > pingfang[i] && target < pingfang[i + 1]) {
if (target % 2 == pingfang[i] % 2) {
int a = (int) ((target - pingfang[i]) / 2);
System.out.println(a);
} else {
int b = (int) ((pingfang[i + 1] - target) / 2);
System.out.println(b);
}
}
}
}
}
发球顺序
大概意思是说,熊大和熊二打乒乓球,然后现在达到k平,也就是一人拿到了k分,如果k<10,那么就是每个人发两个球后再到对方发两个球,如果k>=10,那么就是交替发球。游戏一开始是熊大发球,然后现在输入n,为游戏次数,下面依次输入n个次数的情况k,问每一次下一个是谁发球,熊大为1,熊二为2,输出为每种情况下,谁下一个发球
解题思路
模拟法
- 当k<10时,每个人发两个球,而且是熊大先发,所以如果k是偶数,那么下一次发球就是熊2,如果k是奇数,那么下一次发球就是熊大
- 当k>10时,两个人交替发球,所以下一次发球的一定是熊大
AC代码
public class Solution_蔚来_发球顺序 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] nums = new int[n];
int[] ans = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
for (int i = 0; i < n; i++) {
if (nums[i] < 10) {
if (nums[i] % 2 == 0) {
ans[i] = 1;
} else {
ans[i] = 2;
}
} else {
ans[i] = 1;
}
}
for (int i = 0; i < n; i++) {
System.out.println(ans[i]);
}
}
}