- 在线时间
- 469 小时
- 最后登录
- 2025-8-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7545 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2844
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1160
- 主题
- 1175
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
问题描述】
1 E+ f' @1 N) ?5 E你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量。- D" ]) l/ h Y9 k% J. B
那么这套砝码最少需要包含多少个砝码?! I5 I3 d! Z/ {3 a: [. u3 d
注意砝码可以放在天平两边。
: O' @( n. g8 O* G2 E2 L: O* ]; ~* p% k0 d0 A7 c# |
【输入格式】* D6 A0 X2 t( o3 P
输入包含一个正整数 N。# ^" a8 j, }9 K3 c! }6 O1 ^
0 |. M" W w0 | k, W【输出格式】
2 s5 r) g7 B C# w' \! g输出一个整数代表答案。
8 K1 I0 x4 L T0 G |; x `, ~1 U+ ?1 ^4 o# l: Y8 O0 u5 B
【样例输入】5 e& w3 Y- A# p/ x
7
% P7 ^# _6 O. W+ ~: x# {0 ?2 n- ?, w( _8 q. L* N
【样例输出】; r1 c# j* O# L+ V* \
3) \* l1 G9 Q) R0 Z# F
& @8 Y- O2 `0 w/ D: e【样例说明】1 K$ n. q& }0 m! r- \+ B
3 个砝码重量是 1、4、6,可以称出 1 至 7 的所有重量。, ?! @+ R) f% Q6 B3 _2 ?4 z+ M
1 = 1;
$ R7 a) \; F# l* Q0 s4 \) A2 = 6 − 4 (天平一边放 6,另一边放 4);! Q: W+ G2 | @) w
3 = 4 − 1;
; j- N7 N2 n* J) r, N# G4 = 4;/ a8 f% N7 h! _& V
5 = 6 − 1;3 A3 U, H+ W( ?1 X0 u& F
6 = 6;4 D. D, n) _8 E6 z) B+ r6 \) s
7 = 1 + 6;$ { N, z- k* g; e, z; H* g; f
少于 3 个砝码不可能称出 1 至 7 的所有重量。- import java.util.Scanner;
6 s6 ~% {4 M. I/ ]8 ^+ d+ e - public class Main { 5 C' O/ q, y) R, ^
- public static void main(String[] args) {
! e9 C/ }% n! ~6 Q# r - int n = new Scanner(System.in).nextInt();
# H\" A, ?. b( x1 _; M+ | - int maxWeight = 1, minCnt = 1; - [\" v% s1 }7 T ?; ?1 _. ^6 }
- while (maxWeight < n) { - G5 k. u% R- x: p: Y, f7 O
- maxWeight = maxWeight * 3 + 1; . ~% S1 ~0 Y* h. K/ p+ u. J. T
- minCnt++;
( @4 j8 O, g# Z, u8 v5 i5 Y - } 0 k# k v7 m; o9 Y, Q4 H
- System.out.println(minCnt);
1 D\" H9 @5 b' o: A; C1 { n - } ! M# |6 w- u1 G! R& Q1 Z# I
- }
' c4 r' d) A9 p; ]9 `
复制代码 题解
6 h0 `- `8 y5 O, ~" e' \如果我们可以控制的区间范围 是 [1, n] 最少砝码为x个
# K. E) M" ^/ {8 A! `此时我们想扩大区间范围就只可以增加砝码
8 n. g( S& [# E/ K, O9 t4 g' m& k/ g假设增加的砝码重量为 k
) }- L# R8 y9 F6 r3 D因为我们可以控制 [1, n] 的重量, 而且因为可以把砝码放在左右两把, 想当于我们可以进行加减操作) l5 h& v' d* x1 l8 [
所以新增砝码后, 我们又可以控制[k - n, k + n] 的区间范围了
& v" N. e1 B! c- w8 h6 z- J! \! Q- C* o* ^
让这个新增的控制范围 与 我们原来的可以控制的范围相邻, 就得到了最大的可控范围; z' ^8 b4 t. F2 C* [) R
4 l4 `- S: ^: @; l0 d4 Z0 o
另 n + 1 = k - n k = 2n + 1* N0 X8 s+ H: z! q: h% g& Q8 B
那么x + 1可以控制的最范围就是[1, 3n + 1]7 j; G @$ _: a7 m
) W( h* X* _1 ]* C( |9 ^( W9 b% m/ r3 `1 s* q# O. a* S
6 t0 Y; W2 r! r% J9 o. ]
|
zan
|