- 在线时间
- 472 小时
- 最后登录
- 2025-9-5
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7689 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2887
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1161
- 主题
- 1176
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
问题描述】
7 L; P) Z" z- y1 z你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量。
) V- {, P8 j; F- [2 `那么这套砝码最少需要包含多少个砝码?
3 A7 S/ G" n% O注意砝码可以放在天平两边。
% M0 ~- t7 d3 M" C3 P6 v, e! x
/ k/ m5 f- G/ I. d7 R5 `【输入格式】
. Z6 ]- p( _; y, p- t' j3 Z! ]0 ^输入包含一个正整数 N。' G( q" S% i( P4 S6 w4 h- G
8 K# J* x8 B- |6 {2 k8 }【输出格式】
* M) m# k9 B( `. y* h3 q* l, X输出一个整数代表答案。* A8 f6 }. D7 s' A. l4 ^2 u
8 u2 _+ _0 Y9 q% C9 x, N【样例输入】3 o! p" e9 \$ M& A/ A
7) c0 B' Q+ [% V" r9 e
0 F6 m( ]. k& |# l【样例输出】9 t5 y7 y- Z1 v9 [" K3 i5 A
3' v! ?. `; M& D5 y+ I: f
/ g9 r$ q5 ]2 a- H3 |* V
【样例说明】7 j3 v0 d6 {& J- D* b
3 个砝码重量是 1、4、6,可以称出 1 至 7 的所有重量。
* l: x4 S( Q9 Q. w1 = 1;$ s# E! e0 m: {$ O! K
2 = 6 − 4 (天平一边放 6,另一边放 4);
* N; f& i/ e7 u# l& {3 = 4 − 1;: s4 g3 ~3 {/ z; R
4 = 4;
8 k M/ h0 b- O5 = 6 − 1;$ N" o6 ]) K: P8 U( j& O2 b
6 = 6;
' Q+ v1 ?1 f# A+ r. W: D! i4 I% w4 b5 E$ g7 = 1 + 6;( v5 h, E( V' c9 i
少于 3 个砝码不可能称出 1 至 7 的所有重量。- import java.util.Scanner; / W( S' _; Y( _9 L! {4 y* [ I# u
- public class Main {
% |) y6 z R# P/ Q0 C7 K - public static void main(String[] args) {
1 R9 h& e) G9 U0 g\" f6 F, A' m - int n = new Scanner(System.in).nextInt(); 4 |& i# s' E- L4 \; u2 z
- int maxWeight = 1, minCnt = 1;
5 I, C, |. Q% L, E. J - while (maxWeight < n) { & `' u. c ^7 t! A8 z. \$ Z: r$ z
- maxWeight = maxWeight * 3 + 1; * }8 B+ x2 ^, B1 r% G* I
- minCnt++;
9 ~! H$ O+ g6 ^) ? - } * ?* |2 O1 t9 h: b
- System.out.println(minCnt); : x\" w* `7 O2 n7 P1 K
- } + O1 B' ^ C* n\" y% S8 K/ \
- }
r% b& t5 i/ X1 h1 @+ t3 Y
复制代码 题解* @8 c- {' a: z+ `' F
如果我们可以控制的区间范围 是 [1, n] 最少砝码为x个7 J7 [. x! D8 _6 v1 u
此时我们想扩大区间范围就只可以增加砝码( W9 b! L1 f2 |; }
假设增加的砝码重量为 k
. A& e @# Z4 U- K! Z8 N因为我们可以控制 [1, n] 的重量, 而且因为可以把砝码放在左右两把, 想当于我们可以进行加减操作& n: f! r# v8 \8 ]; J2 [5 a8 E' J% j- w
所以新增砝码后, 我们又可以控制[k - n, k + n] 的区间范围了' S" [# a, U4 o+ Y
- g7 z% S. E# E) E7 c
让这个新增的控制范围 与 我们原来的可以控制的范围相邻, 就得到了最大的可控范围
8 n# G7 I4 z( i! d' _! Y0 ]
3 L. V+ H9 Y/ c U2 }另 n + 1 = k - n k = 2n + 14 P* ?* @: X! |, P2 B; ]- B" q/ [
那么x + 1可以控制的最范围就是[1, 3n + 1]
3 N6 i8 B+ k1 T' J0 y5 }. P6 G8 I* I0 o, |
& y- O. L0 ?0 G
z: Z8 v v' E0 H: }+ | |
zan
|