- 在线时间
- 468 小时
- 最后登录
- 2025-7-19
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7493 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2828
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1160
- 主题
- 1175
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
问题描述】
) |8 i: S, d/ o! ?你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量。
& M6 t9 c4 s% z" ^) _/ s6 r+ @那么这套砝码最少需要包含多少个砝码?
0 I! b( M* {5 e6 F O% R: q注意砝码可以放在天平两边。* F, t, X5 ^0 r( A9 y
# P; i4 u6 Z# ?' L2 g5 H4 H
【输入格式】. x5 H5 f* i7 k/ Z0 W8 V% K. K
输入包含一个正整数 N。
. q6 O; i, h \, ^/ l
1 `* @+ H7 Q- \" { N# s【输出格式】
@6 X6 l& ?, p输出一个整数代表答案。1 L4 k# c# ~ [% |3 x8 \
3 S+ M) B% i$ A( `
【样例输入】
$ d X% |4 X! z; G) K6 s- P7
! R$ C$ \: p* Y" C% r4 K; p% ?4 {7 p/ o: L2 h' D
【样例输出】
6 {8 b( ~7 X3 b( A0 A1 M' \3
6 [4 Z& g; P& h1 k) _4 C) [2 j; D" f
【样例说明】
, ~& ]! P/ c$ T* U3 O% ~, b3 个砝码重量是 1、4、6,可以称出 1 至 7 的所有重量。
& Q# D, \4 u m @$ n$ ?( O1 = 1;
( L4 a* q/ E7 h2 = 6 − 4 (天平一边放 6,另一边放 4);3 t( S. E7 S7 j% q$ x5 S/ b/ h
3 = 4 − 1;
+ l1 z. P! d$ n7 @2 |: l3 u4 = 4;
9 h; w/ U/ T$ }5 = 6 − 1;' J+ S2 h0 H8 P# {6 w @3 G- a
6 = 6;
8 O% A! X* Q3 n! ]8 V7 = 1 + 6;
# g9 ~5 k2 {$ Y6 L. L2 n! }7 ^少于 3 个砝码不可能称出 1 至 7 的所有重量。- import java.util.Scanner; % P* [/ t4 @! f% u
- public class Main { 0 c9 T\" x5 ~% R( F* B5 M' g
- public static void main(String[] args) { $ {7 U/ u( f# }3 G, V, ]4 t
- int n = new Scanner(System.in).nextInt();
7 y* [# ^/ Z% A - int maxWeight = 1, minCnt = 1;
9 m! y! J; ]* Y\" O; @3 u& r - while (maxWeight < n) {
. q% E2 I3 B: B3 I- h - maxWeight = maxWeight * 3 + 1; + m9 m\" n: d4 N6 g3 D$ x, ^7 D
- minCnt++; ; `7 H) ?/ G- K4 N& U8 o1 x
- }
+ I8 R m; w+ @! e! s9 w2 `/ y+ ^ - System.out.println(minCnt);
# G+ d1 y H) d& M; S0 i - } * }; k% _7 b0 {: r- S7 w
- }
; ?& q0 r* V: ?8 \ c
复制代码 题解" E* V4 o) z% }' ~; P* ^/ c
如果我们可以控制的区间范围 是 [1, n] 最少砝码为x个
8 _; a3 n+ T; G. @0 n此时我们想扩大区间范围就只可以增加砝码
& u& ?! L/ S. l, A5 d7 v/ p T假设增加的砝码重量为 k7 `- t; F: S8 n: x8 h: {
因为我们可以控制 [1, n] 的重量, 而且因为可以把砝码放在左右两把, 想当于我们可以进行加减操作
8 r1 E6 l" s7 J5 S6 m E9 @+ m9 X M所以新增砝码后, 我们又可以控制[k - n, k + n] 的区间范围了' x& X% {" W: ^6 ]! u
$ x ]7 I3 }8 {- ]让这个新增的控制范围 与 我们原来的可以控制的范围相邻, 就得到了最大的可控范围
& ]- Y8 i" c3 y; Q, L% E
' h* w* z) m0 _1 x另 n + 1 = k - n k = 2n + 1+ }2 Q: F8 Y- H$ ^
那么x + 1可以控制的最范围就是[1, 3n + 1]
9 X% A2 Z1 q: G" E
# Q4 ]/ w# x$ `) P+ ]% t4 E8 a) w7 [+ {5 I
* y8 Z- C. I. B' J/ K6 b0 h
|
zan
|