牛牛给你一个数 n ,将其拆成 k 个数字的和,使得用这 k 个数字的部分和能表示出 1 到 n 中的所有数字。例如 n=6 , k=3 时,将 6 分为 1,2,3 ,那么有 1=1,2=2,3=3,4=1+3,5=2+3,6=1+2+3 。现在给你 n ,求最小的 k 是多少。
第一行为一个 t ,表示有 t 组数据。 接下来有 t 行,每个一个整数 n 。 1≤ t≤ 1000,1≤ n≤ 10^9
输出为 t 行,每行表示一个最小的 k 。
2 6 2
3 2
考点:基础数学
数据规模 t ≤ 1e3 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:基础数学
本题切入点
要让 k 个数的部分和表示出 1..n,最优拆分是二进制幂次(1,2,4,...),答案 = ⌈log2(n+1)⌉。
把题目转化为数学表达式,用公式或性质直接求值。
思路框架(基础数学 通法 · 非本题专属)
实现要点:浮点输出通常要求相对误差不超过 1e-7,注意用 double/long double 或高精度小数。
复杂度:时间 O(1) ~ O(log n) | 空间 O(1)
该范式的通法易错点
对照本题
样例 1
2 / 6 / 23 / 2解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:贝壳找房2023届校招测试类试卷。