最新华为OD机试
题目描述
小明从糖果盒中随意抓一把糖果,每次小明会取出一半的糖果分给同学们。
当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。
小明最少需要多少次(取出、放回和平均分配均记一次),能将手中糖果分至只剩一颗。
输入描述
抓取的糖果数(<10000000000):15
输出描述
最少分至一颗糖果的次数:5
示例1
输入
15
输出
5
说明
15+1=16;16/2=8;8/2=4;4/2=2;2/2=1;
示例2
输入
6
输出
3
说明
6/2=3,3-1=2,2/2=1
解题思路
题目要求的是找出最少的操作次数,使得手中的糖果数从给定数量减少至仅剩一颗。每次操作包括取出糖果、放回糖果以及平分糖果。这个问题实质上是一个贪心算法的应用,目标是尽快将糖果数量减至1。
-
循环直到糖果数为1。
在循环中,检查当前糖果数是否为奇数。
- 如果是奇数,检查加1后的数或减1后的数哪一个更适合下一步操作(即哪个能被2整除)。这里的贪心选择基于加1后能否被4整除,因为如果能被4整除,说明下一步可以继续平分两次。
-
特殊处理当糖果数为3的情况,因为这是最快减至1的路径。
-
每进行一次操作(不管是加1、减1还是分配),计数器加1。
Java
import java.util.Scanner;
public class Main {

订阅专栏 解锁全文
&spm=1001.2101.3001.5002&articleId=141534938&d=1&t=3&u=67bcbc86408a41938a0e2c2e0484bb60)
19万+

被折叠的 条评论
为什么被折叠?



