华为OD机试真题 Java 实现【分糖果】【2022Q2 200分】,附详细解题思路

news/2024/11/16 2:39:11/

在这里插入图片描述

一、题目描述

小明从糖果盒中随意抓一把糖果,每次小明会取出一半的糖果分给同学们。

当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。

小明最少需要多少次(取出、放回和平均分配均记一次),能将手中糖果分至只剩一颗。

二、输入描述

抓取的糖果数(<10000000000):

27

三、输出描述

最少分至一颗糖果的次数:

7

啥意思呢?

  1. 27+1=28
  2. 28/2=14
  3. 14/2=7
  4. 7+1=8
  5. 8/2=4
  6. 4/2=2
  7. 2/2=1

懂了?

四、解题思路

  1. 读取输入的糖果数量 sum;
  2. 调用递归函数 count(sum, 0),传入糖果数量和初始操作次数 0;
  3. 在递归函数中,首先判断糖果数量是否小于等于 1,如果是,则返回当前的操作次数;
  4. 如果糖果数量是偶数,递归调用 count(sum/2, count + 1),糖果数量除以 2,操作次数加一;
  5. 如果糖果数量是奇数,递归调用 Math.min(count(sum + 1, count + 1), count(sum - 1, count + 1)),分别对糖果数量加一和减一进行递归调用,取操作次数较少的结果;
  6. 返回最终的操作次数。

五、Java算法源码

public static void main(String[] args) throws Exception {Scanner scanner = new Scanner(System.in);long sum = scanner.nextLong();System.out.println(count(sum, 0));
}private static int count(long sum, int count){if(sum <= 1){return count;}if(sum%2==0){return count(sum/2, count + 1);}return Math.min(count(sum + 1, count + 1), count(sum - 1,count + 1));
}

六、效果展示

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述


http://www.ppmy.cn/news/244219.html

相关文章

【文生图系列】 Stable Diffusion v2复现教程

文章目录 xformersbug 记录 txt2imgdiffusers参考 基础环境承接Stable Diffusion v1, 详情请见我的博文【文生图系列】 Stable Diffusion v1复现教程。然后更新pytorch和torchvision的版本&#xff0c;因为要使用GPU和xformers&#xff0c;需要下载gpu版本的pytorch。再下载ope…

如何从零开始构建 API ?

假设你请承包商从零开始建造一座房子&#xff0c;你肯定期望他们交付最高质量的房子。他们必须通过检查、遵守安全规范并遵循项目中约定的要求。因为建房子可容不得走捷径。如果承包商经常走捷径&#xff0c;他们的声誉会受到影响&#xff0c;从而失去客户。其实&#xff0c;开…

[codeup 1818最大公约数]

[codeup 1818最大公约数] 题目: 求最大公约数与最小公倍数 CODE #include <cstdio>int gcd(int a,int b){if(b0)return a;return gcd(b,a%b); }int lcm(int gcd,int a,int b){return (a/gcd)*b; }int main(){int a,b;scanf("%d %d",&a,&b);int ret…

ios13全选手势_ios13的三指手势操作怎么关闭 只要几步就行了

在 iOS 13 中&#xff0c;苹果增加了全新的文本编辑手势&#xff0c;能够让用户轻松地完成剪切、拷贝和粘贴。但该功能会默认进行开启&#xff0c;很多用户发现&#xff0c;该功能与游戏的三指操作冲突了&#xff0c;非常影响游戏操作。 iOS 13 三指操作如何关闭? 比较遗憾的是…

#动态规划,离散#洛谷 1052 codevs 1105 jzoj 1818(junior)1169 (senior)过河

题目 青蛙从0开始&#xff0c;不停的向终点跳跃。一次跳跃的距离是 S S S到 T T T之间的任意正整数&#xff08;包括 S , T S,T S,T&#xff09;。当青蛙跳到或跳过坐标为 L L L 的点时&#xff0c;就算青蛙已经跳出了独木桥。问最少要踩多少石子过去。 分析 动态规划&…

python 力扣(LeetCode) 1818.绝对差值和

题目链接 力扣&#xff08;LeetCode&#xff09; 1818.绝对差值和 不想戳的看下图&#xff1a; 样例&#xff1a; 数据范围&#xff1a; 解题思路&#xff1a; 二分查找后进行排序。 代码如下&#xff1a; class Solution:def minAbsoluteSumDiff(self, nums1: List[int], …

vivo 1805的usb调试模式在哪里,开启vivo 1805usb调试模式的流程

经常我们使用安卓手机通过数据线连接上PC的时候&#xff0c;如果手机没有开启usb调试模式&#xff0c;PC则没办法成功识别我们的手机&#xff0c;部分软件也没办法正常使用&#xff0c;此情况我们需要找方法将手机的usb调试模式打开&#xff0c;下面我们讲解vivo 1805如何开启u…

[BZOJ1818][CQOI2010]内部白点

题目链接&#xff1a; BZOJ1818 首先&#xff0c;题目根本不会有\(-1\)的情况&#xff0c;且所有节点变色只发生在第一秒。 证明&#xff1f;如果一个节点\((x,y)\)在第二秒变色&#xff0c;那么一定有一个节点会在第一秒内于\((x,y)\)的四周生成。 假设在左边&#xff08;其他…