【华为机考E卷】-“分糖果”题解思路java

算法每一题,成长每一天~

C0E9 分糖果

真题链接:【持续更新】2024华为 OD 机试E卷 机考真题库清单(全真题库)

思路

在这里插入图片描述

Java

import java.util.Scanner;

public class C0E9 {

    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        long num = in.nextLong();

        int count = 0;
        OUT:
        while (num > 1) {
            for (int i = 1; i <= 40; i++) { // 40,保证范围在0~10000000000
                if (num == 1L << i) { // 2^i,可以直接得出答案
                    count = count + i;
                    break OUT;
                }
                if (num == (1L << i) - 1) {
                    count = count + 1 + i; // 2^i-1,先补一颗
                    break OUT;
                }
            }

            if (num % 2 == 0) {
                // 偶数,直接除2
                num = num / 2;
                count++;
            } else {
                // 奇数,减1再除2
                num = num - 1;
                count++;
                num = num / 2;
                count++;
            }
        }

        System.out.println(count);
    }
}

总结

1、主要是思路分析,代码没什么难度
2、熟悉位运算,2n = 1 << n


算法要多练多练多练!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值