当前位置: 首页 > article >正文

华为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

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);
	}
}

http://www.kler.cn/a/399775.html

相关文章:

  • Area-Composition模型部署指南
  • HTML之列表学习记录
  • Http常⻅见请求/响应头content-type内容类型讲解(笔记)
  • <项目代码>YOLOv8 番茄识别<目标检测>
  • 华为欧拉系统使用U盘制作引导安装华为欧拉操作系统
  • 如何在 SQL Server 中新增账户并指定数据库权限
  • VSCode解说
  • 28.<Spring博客系统⑤(部署的整个过程(CentOS))>
  • 基于微信小程序的助农商城+LW示例参考
  • 使用 Elastic 3 步实现基于 OTel 的原生 K8s 和应用可观测性
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】屏幕适配
  • 使用uniapp开发微信小程序使用uni_modules导致主包文件过大,无法发布的解决方法
  • 银河麒麟设置ip
  • Java retainAll() 详解
  • 滑动窗口入门(LeetCode——1456定长字符串中元音字母的最大数目)
  • 【在Linux世界中追寻伟大的One Piece】手写序列化与反序列化
  • 利用hive元数据统计数据量
  • 编程之路,从0开始:结构体详解
  • 大数据技术Kafka详解 ① | 消息队列(Messages Queue)
  • 微信小程序底部button,小米手机偶现布局错误的bug
  • etcd部署(基于v3.5.15)
  • C++标准模板库 -- map和set
  • 怎么看待Ai发展前景?
  • 用python中的tkinter包实现进度条
  • 【C++】C++11 新特性揭秘:序章
  • window的Anaconda Powershell Prompt 里使用linux 命令