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

(新B卷,100分)- 分糖果(Java JS Python C)

(新B卷,100分)- 分糖果(Java & JS & Python & C)

题目描述

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

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

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

输入描述

抓取的糖果数(<10000000000):15

输出描述

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

用例
输入15
输出5
说明
  1. 15+1=16;
  2. 16/2=8;
  3. 8/2=4;
  4. 4/2=2;
  5. 2/2=1;
题目分析

本题由于是每次折半,因此本题数量级即便很大,也不怕超时。

没有了超时的后顾之忧,本题,直接可以暴力逻辑求解,假设输入的是num,分配次数count初始为0,那么:

  • 如果num % 2 == 0,则可以直接折半,此时分配次数count++, num /= 2
  • 如果num % 2 !=0,则不可以直接折半,此时需要开两个分支:
  1. 取出一个糖,即num += 1,然后分配次数count++,之后继续前面折半逻辑
  2. 放回一个糖,即num -= 1,然后分配次数count++,之后继续前面折半逻辑

最终我们只需要在众多分支中,取最少的count即可。

上面逻辑可以基于递归实现。具体实现请看代码。

Java算法源码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println(getResult(sc.nextLong())); } public static long getResult(long num) { int[] ans = {Integer.MAX_VALUE}; recursive(num, 0, ans); return ans[0]; } public static void recursive(long num, int count, int[] ans) { if (num == 1) { ans[0] = Math.min(ans[0], count); return; } if (num % 2 == 0) { recursive(num / 2, count + 1, ans); } else { recursive(num + 1, count + 1, ans); recursive(num - 1, count + 1, ans); } } }
JS算法实现
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { console.log(getResult(Number(line))); }); function getResult(num) { ans = [Infinity]; recursive(num, 0, ans); return ans[0]; } function recursive(num, count, ans) { if (num == 1) { ans[0] = Math.min(ans[0], count); return; } if (num % 2 == 0) { recursive(num / 2, count + 1, ans); } else { recursive(num + 1, count + 1, ans); recursive(num - 1, count + 1, ans); } }
Python算法源码
import sys # 输入获取 num = int(input()) def recursive(num, count, ans): if num == 1: ans[0] = min(ans[0], count) return if num % 2 == 0: recursive(num // 2, count + 1, ans) else: recursive(num + 1, count + 1, ans) recursive(num - 1, count + 1, ans) # 算法入口 def getResult(): ans = [sys.maxsize] recursive(num, 0, ans) return ans[0] # 算法调用 print(getResult())
C算法源码
#include <stdio.h> #include <limits.h> #define MIN(a,b) (a) < (b) ? (a) : (b) void recursive(long long num, int count); int ans = INT_MAX; int main() { long long num; scanf("%lld", &num); recursive(num, 0); printf("%d\n", ans); return 0; } void recursive(long long num, int count) { if(num == 1) { ans = MIN(ans, count); return; } if(num % 2 == 0) { recursive(num / 2, count + 1); } else { recursive(num + 1, count + 1); recursive(num - 1, count + 1); } }
http://www.jsqmd.com/news/95782/

相关文章:

  • 开发智能化的金融产品生命周期管理与退市决策引擎
  • 【分析式AI】-带你秒弄懂决策树与随机森林
  • 大模型Agent面试精选15题(第四辑)-Agent与RAG(检索增强生成)结合的高频面试题
  • 中国科学技术大学LaTeX论文模板参考文献格式完整解析与实战指南
  • 【后端】【Java】一文详解为什么 JPA 会慢?JPA 底层执行流程深度解析
  • 【后端】【Java】Swagger 与 Spring Boot 2.6+ 版本不兼容的问题
  • LeakCanary如何避免误报内存泄漏?
  • LeakCanary 检测内存泄漏的核心原理
  • diskinfo下载官网之外的选择:监控Qwen3-VL-30B运行状态的硬件工具
  • 使用Conda管理Stable Diffusion 3.5 FP8依赖包的最佳实践
  • 基于SSM的企业项目管理系统【源码+文档+调试】
  • 火山引擎AI大模型加持!Qwen-Image-Edit-2509助力电商视觉优化
  • CUDA安装与FP8支持:让Stable Diffusion 3.5在RTX4090上飞起来
  • APK签名打包流程:发布正式版ACE-Step安卓应用必备步骤
  • 如何部署Wan2.2-T2V-A14B镜像并调用token进行推理?
  • 【go语言 | 第3篇】go中类的封装、继承、多态 + 反射
  • 虚拟零售中AI架构的多语言支持:如何适应全球化市场?
  • 零基础入门Stable Diffusion 3.5 FP8:手把手教你完成Python安装配置
  • 【PMSG风力涡轮机建模】基于直驱永磁同步发电机(PMSG)的1.5MW风力发电机的详细建模(Simulink仿真实现)
  • Android Studio开发APP接入ACE-Step音乐API:移动端创作新体验
  • k230 Pyhton三角形识别
  • 终极右键菜单优化利器:ContextMenuManager完全使用手册
  • 年营收2000亿电商,3370万用户信息泄露,CEO引咎辞职
  • 终极网站下载工具:5分钟学会整站备份与离线浏览
  • 如何快速释放Windows磁盘空间:终极存储分析工具完整指南
  • 基于OpenSpec标准构建:HunyuanVideo-Foley API设计规范公开
  • 20、数字 FIR 滤波器的逐步设计
  • 3分钟学会原神帧率解锁:告别卡顿的终极优化指南
  • Driver Store Explorer终极指南:轻松管理Windows驱动存储库
  • 一键升级 OpenSSH 10到最新版:告别手工编译、兼容国产系统、批量部署无忧!