- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
问题描述】$ [3 g2 v4 s0 B& [
你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量。- i9 W1 e, r! _( }( X* u
那么这套砝码最少需要包含多少个砝码?3 K! h8 ~& N0 W5 D t: b
注意砝码可以放在天平两边。
1 q5 i( l5 T+ ?4 G, T
) V' T/ {+ y, Q z9 i' A: b4 Q【输入格式】
9 u# s9 G0 B& ~) g5 a输入包含一个正整数 N。* P: a ?, E: ~8 L' ~
* `# Y$ g/ `* n2 [- {【输出格式】
n O- A: r) \8 d% X% q输出一个整数代表答案。- ]/ U0 o3 m6 @2 u; b0 d; R( o" L* g
+ @/ J( J I f2 O0 B! t/ Z
【样例输入】
! {, P9 y/ Z* a: |: Z8 r( ^7
2 A f9 ?; F9 |% @ R% K6 m" G* x8 _% @4 n
【样例输出】
- p- ~6 z0 s0 B3 S3# a* \; L- g6 w$ B- H
+ q t) h1 Q+ }% p- s/ {【样例说明】
. s2 e& N7 _3 h$ h7 X3 个砝码重量是 1、4、6,可以称出 1 至 7 的所有重量。% y9 |) P3 N3 {6 ^
1 = 1;/ s! T& D% |1 k8 R
2 = 6 − 4 (天平一边放 6,另一边放 4);1 E* W0 c9 ^6 O
3 = 4 − 1;1 N- {/ Z2 j8 ]+ r" b6 i
4 = 4;. z% y7 W" m3 Z1 e
5 = 6 − 1;
3 W1 f0 k) {% a6 d5 Z/ r6 }! y1 I6 = 6;
+ x2 r$ @2 l4 L' d& O0 ?- B- |7 = 1 + 6;" @ Y# Q4 X. Y; }/ o
少于 3 个砝码不可能称出 1 至 7 的所有重量。- import java.util.Scanner; 8 Q I7 t/ r, u% m0 f- _5 g
- public class Main { & O5 q- l- w6 m1 `& K
- public static void main(String[] args) { ' n& D+ m6 a( ?* T% p
- int n = new Scanner(System.in).nextInt();
% Q' v! T# D, ~( E1 X* ?* @) Y - int maxWeight = 1, minCnt = 1; # Y# L+ S; f: q- A& h c T\" q6 E% j
- while (maxWeight < n) { & x- }: g; V f9 D- Z3 s
- maxWeight = maxWeight * 3 + 1; ; ]5 P; l3 S- a3 ^
- minCnt++;
u. X* X; |9 ^, x! K6 a - }
3 A/ [- L2 u# V. t7 e7 W# I - System.out.println(minCnt);
, |/ F- j+ M3 v) N1 [. ~ - } # \' @9 R4 Z2 q0 G: i
- }( h1 Z; ~+ i5 v+ m/ z
复制代码 题解: o" K& y9 E: D& b9 W; N
如果我们可以控制的区间范围 是 [1, n] 最少砝码为x个8 Z) H+ H, {9 F8 i. r8 O/ f
此时我们想扩大区间范围就只可以增加砝码
6 p# t' s4 i+ @假设增加的砝码重量为 k" O- J" ~9 d3 C, C6 S' b1 u
因为我们可以控制 [1, n] 的重量, 而且因为可以把砝码放在左右两把, 想当于我们可以进行加减操作
+ e* `. }9 F$ j5 c7 e0 E, h所以新增砝码后, 我们又可以控制[k - n, k + n] 的区间范围了* ]" p# I/ o& z# A# `+ ^9 W; V
- u8 U, l; H& ^" f2 i! q1 V
让这个新增的控制范围 与 我们原来的可以控制的范围相邻, 就得到了最大的可控范围( a' l- A" g# ~" J _9 o; v7 Z
; N8 K) A. G% v# A5 a- M& {% f! X, E另 n + 1 = k - n k = 2n + 1
' u& p% a" F( r% B; d! E那么x + 1可以控制的最范围就是[1, 3n + 1]" q P5 V0 b( S; U4 X( G' ?
4 y' d2 k) I% o9 g" c: E' r& j+ X# u3 W
. m3 J! R$ D/ D; p8 d
|
zan
|