算法每一题,成长每一天~
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
算法要多练多练多练!!