- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
问题描述】
. }6 c9 B& y2 `你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量。
|. _" D8 s. r6 w那么这套砝码最少需要包含多少个砝码? l* g2 ~8 d6 @; c+ l+ |1 A
注意砝码可以放在天平两边。 h& o# ^8 _$ C1 A7 {8 }
. x% m# `( C- y+ Q
【输入格式】
+ Z4 d+ p! ]8 H. {输入包含一个正整数 N。
4 X$ }' |4 H0 _, }5 J! m
9 k$ C# L5 F% f6 J0 [# O【输出格式】
. p s; I9 f5 |) v h5 C9 W输出一个整数代表答案。
% `0 L+ v$ s/ W8 A" I* b* [
: i" V f# Z3 c: } ?9 c【样例输入】
, k- o' U6 j6 E9 s7% Y; x; m+ K3 n, g+ q1 |: x
* {- g* Y4 M% V5 e
【样例输出】
8 F; s7 Q) |( n% _. g" j! m" E" ]9 u3; r* I. `$ I% Q, S9 o
3 ?9 r7 o- x" d8 I9 N: ?$ S8 E【样例说明】
- ~& l2 e a) y0 n1 e8 s7 w3 个砝码重量是 1、4、6,可以称出 1 至 7 的所有重量。0 j0 W5 P: u& y% Q
1 = 1;" s- }% u% Y9 ^1 Y c
2 = 6 − 4 (天平一边放 6,另一边放 4);
. u' r6 [! o" j% K7 M3 z3 [5 M( d3 = 4 − 1;
, k' t! j- J) w. r/ ~( ?- T4 = 4;: t5 Y! ?) ^$ o( R' g
5 = 6 − 1;
4 x0 u3 h0 U% ~1 H$ O# F# @6 = 6;
6 K" w# }+ K' O+ ]1 Z& ^! g7 = 1 + 6;
. [3 q6 r; z% X1 _+ r少于 3 个砝码不可能称出 1 至 7 的所有重量。- import java.util.Scanner;
! T4 A, s8 t/ Q0 R- ] - public class Main { N! \' O- Q! f+ t+ }
- public static void main(String[] args) {
- M+ t+ F0 @' X\" b- ] - int n = new Scanner(System.in).nextInt();
+ y0 y/ t) y# V& m+ K: X - int maxWeight = 1, minCnt = 1; ) w2 C9 y! g3 n( s0 A0 q9 u' k& c
- while (maxWeight < n) { 0 n: c: v: h\" t* V1 Y
- maxWeight = maxWeight * 3 + 1;
' G p, |1 V& i+ B6 l3 d - minCnt++;
. a\" Q0 _3 l# G2 @- P% ] - } ( _+ O4 V6 b) v2 r/ D; I! }, `
- System.out.println(minCnt); : z2 _! q1 T; l\" F; g! L5 ?+ p& A
- } 8 |' x$ O) B, b
- }3 ?+ P5 f5 t- A
复制代码 题解
3 _8 Z( G. Z6 Y2 x8 b8 e* i+ P如果我们可以控制的区间范围 是 [1, n] 最少砝码为x个; s% n9 i. l; u5 y1 n+ ^6 f
此时我们想扩大区间范围就只可以增加砝码 O( M7 }/ k. r' v5 Z" D
假设增加的砝码重量为 k, K, _6 I* a4 U
因为我们可以控制 [1, n] 的重量, 而且因为可以把砝码放在左右两把, 想当于我们可以进行加减操作
* x1 K- T( x% Y$ D. d所以新增砝码后, 我们又可以控制[k - n, k + n] 的区间范围了
7 J2 K% P8 v6 j, p# ~2 a( N2 \ l% ^% W! a. e( ], [" v
让这个新增的控制范围 与 我们原来的可以控制的范围相邻, 就得到了最大的可控范围5 H m `* T# s2 `0 W: `+ e
2 n5 N. F+ y4 A$ y6 e6 s1 r
另 n + 1 = k - n k = 2n + 1
3 r0 K- H" [/ w% ^3 ?' h# d那么x + 1可以控制的最范围就是[1, 3n + 1]
/ y3 R6 ~) N5 C( `; A. k) a3 U: j- P1 B b8 u1 i4 ?
- ?7 F) n9 P0 a6 ]! D3 m3 x6 c
/ y1 E2 F$ {9 ?' g# J1 d! N: l, h% f8 ^ |
zan
|