当前位置: 首页 > 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.cnnetsun.cn/news/73773.html

相关文章:

  • FLUX.1-dev图文理解能力深度测评:视觉问答与指令微调表现分析
  • 内点法求最优潮流(Matlab代码实现)
  • 如何快速释放Windows磁盘空间:终极存储分析工具完整指南
  • ComfyUI与Redis缓存集成:加速大规模生成任务
  • HunyuanVideo-Foley离线版发布:支持内网部署与私有化音效生成
  • ComfyUI工作流整合Stable Diffusion 3.5 FP8:实现批量生成高效输出
  • 10、Z变换:原理、计算与应用详解
  • 17、FIR和IIR滤波器的结构与实现
  • Mobile Select移动端滚动选择器深度解析:从基础应用到企业级解决方案
  • 22、IIR滤波器的逐步设计
  • 26、数字滤波器中的有限字长效应及相关知识解析
  • ZonyLrcToolsX 歌词下载工具完全使用手册
  • 4、深入理解BPF Maps:创建、操作与应用
  • 10、深入探索BPF工具:BPFTool与BPFTrace的实用指南
  • 14、XDP 编程:从基础到实践
  • X-TRACK DIY制作全攻略:从零打造个性化GPS自行车码表外壳
  • 火山引擎文档中心上线Qwen-Image-Edit-2509接入指南
  • FLUX.1-dev支持指令微调?多任务学习实践案例分享
  • 6、深入理解Linux USB文件系统:从VFS到usbfs的构建
  • 解决failed to connect to api.anthropic.c错误,转向国产Qwen方案
  • ComfyUI与Cherry Studio协作:打造个性化AI创作空间
  • 终极轨道计算指南:3个实战技巧解析
  • 时区相关的问题,开发如何自测?
  • 城通网盘直链解析神器:三步解锁高速下载新体验
  • 21届智能车赛外延创意:用车载语音指令触发ACE-Step音乐生成
  • 2025年8款AI论文生成器大揭秘,一键极速写超长篇论文,效率提升300%!
  • 还在用留AIGC痕迹的AI写论文?7款免费工具知网维普查重过
  • Wan2.2-T2V-5B模型部署指南:快速搭建你的实时视频生成服务
  • HunyuanVideo-Foley实战教程:使用Git下载并运行视频音效AI
  • 开源不等于免费:ACE-Step商业化路径中GPU算力与Token的定价策略