华为ID机试 -- 分糖果 E100

题目描述

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

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

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

输入描述

抓取的糖果数(n < 10000000000)

输出描述

最少分至一颗糖果的次数

示例

输入

15

输出

5

说明

1.15+1=16;

2.16/2=8;

3.8/2=4;

4.4/2=2;

5.2/2=1;

题解

  • 如果末位不等于0, 说明为偶数,不需要拿或者放
  • 如果倒数第二位为 0 则减去一次可以消除至少两位
  • n ≥ \geq ≥ 3
    • n = = = 3 的时候,减一需要分一次即可, 加一需要分两次,选择减一
    • 其它说明有多个1 , 增加一个可以消除多个1 ,使拿糖果的次数降为最少

源码Java

java 复制代码
public class DivCandy {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int div = 0;
		while (n > 1) {
			// 如果末位不等于0, 说明为偶数,不需要拿或者放
			if ((n & 1) == 0) {
				n = n >> 1;
			} else if ((n & 2) == 0) {
				// 如果倒数第二位为 0  则减去一次可以消除至少两位
				n = n - 1;
			} else {
				// n 等于 3 的时候,减一位分一次可以为0
				if (n == 3) {
					n = n - 1;
				} else if ( n > 3 ) {
					// 其他情况说明有多个1 , 增加一个可以消除多个1 ,使拿去糖果的次数降为最小
					n += 1;
				}
			}
			div++;
		}
		System.out.println(div);
	}
}
相关推荐
_OP_CHEN2 分钟前
【算法基础篇】(三十一)动态规划之基础背包问题:从 01背包到完全背包,带你吃透背包问题的核心逻辑
算法·蓝桥杯·动态规划·背包问题·01背包·完全背包·acm/icpc
L、2183 分钟前
Flutter 与 OpenHarmony 深度融合实践:打造跨生态高性能应用(进阶篇)
javascript·flutter·华为·智能手机·harmonyos
长安er19 分钟前
LeetCode876/141/142/143 快慢指针应用:链表中间 / 环形 / 重排问题
数据结构·算法·leetcode·链表·双指针·环形链表
Aaron158824 分钟前
电子战侦察干扰技术在反无人机领域的技术浅析
算法·fpga开发·硬件架构·硬件工程·无人机·基带工程
遇到困难睡大觉哈哈24 分钟前
HarmonyOS —— Remote Communication Kit 定制数据传输(TransferConfiguration)实战笔记
笔记·华为·harmonyos
zhglhy44 分钟前
Jaccard相似度算法原理及Java实现
java·开发语言·算法
仰泳的熊猫1 小时前
1140 Look-and-say Sequence
数据结构·c++·算法·pat考试
handuoduo12341 小时前
SITAN中avp必要性分析
人工智能·算法·机器学习
zl_vslam1 小时前
SLAM中的非线性优-3D图优化之相对位姿Between Factor右扰动(八)
人工智能·算法·计算机视觉·3d
FrameNotWork1 小时前
【HarmonyOS 状态管理超全解析】从 V1 到 V2,一次讲清 @State/@Observed/@Local…等所有装饰器!附超易懂示例!
华为·harmonyos