20220826蔚来笔试

小红的完全平方数

就是输入是一个数,然后每次只能加2或者减2,求变成完全平方数的最小操作次数

示例1:

输入:4
输出:0

示例2:

输入:28
输出:4
解释:28最近的完全平方数是2536,所以最小操作次数是(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]);
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值