- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
问题描述】! `" V. t! E9 N/ Q2 G4 `: y: w
你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量。, E9 T9 D3 \4 ^) ?" [
那么这套砝码最少需要包含多少个砝码?& U4 L! }. E% ]5 B/ h& p/ V
注意砝码可以放在天平两边。# j: N2 L4 X' Y% p5 B. A
1 b! X$ X# k( y2 V0 ]" O( f J) M
【输入格式】
! z/ w$ ~# N+ {$ x- V输入包含一个正整数 N。
- B0 }2 U$ |% V1 Z8 V$ }" a# y: A) R9 q
【输出格式】
5 e! T! C! ]' E6 I9 O4 l" f输出一个整数代表答案。
' b4 m4 u: j! Q* o4 N$ b0 v/ n! Q! N) I b; u5 x2 M
【样例输入】
- h) l' z; k! u, @7
Y( L7 c8 t* M$ w$ {# M- s7 Q& h# P" m- z# R0 l9 H |
【样例输出】: H5 _( ?9 b6 g
3. i+ N4 n+ N2 p3 V5 k7 |
5 @% J4 T! M. d( g$ r5 E【样例说明】
4 l* C4 G5 l1 j1 W3 个砝码重量是 1、4、6,可以称出 1 至 7 的所有重量。5 y* P. k2 V4 i* ^
1 = 1;! c! y$ w4 M/ J2 n4 |
2 = 6 − 4 (天平一边放 6,另一边放 4);
- \7 u+ e; S/ r2 A6 r' j3 = 4 − 1;+ ?0 v0 N+ |& o* G; M% |% Z
4 = 4;
! O. f4 T3 U; Y) C/ A; H }. G5 = 6 − 1;
0 g2 ]/ i5 Q5 t4 U6 = 6;
: |0 b2 d8 i: l& f( R7 = 1 + 6;
$ j' ?3 n- c6 f* }$ y. a/ K少于 3 个砝码不可能称出 1 至 7 的所有重量。- import java.util.Scanner;
$ ?\" c2 l! e' K\" m3 r - public class Main {
( m& g- d$ w# N m- |! ]3 S - public static void main(String[] args) {
, v! ?- I o( H1 Z. A% v( G9 Z. O - int n = new Scanner(System.in).nextInt(); 5 q/ i n/ }2 \$ L2 u F3 j
- int maxWeight = 1, minCnt = 1;
5 @! P\" p4 h4 ~/ H) M$ w - while (maxWeight < n) {
3 B6 v7 A3 M C' b - maxWeight = maxWeight * 3 + 1;
, J! f$ V2 V6 @6 j, M$ b - minCnt++;
& Z' C( x6 N$ Q9 Y' O- N. X( C - }
5 C/ B5 n4 d4 ~) O\" D - System.out.println(minCnt); # [; Y! D1 {5 Q5 R4 `- h
- }
8 r2 j4 d1 K6 n/ ~% K: c- B - }, g+ U: @+ q3 {5 j
复制代码 题解
. H. {) F& ^# N* R0 F; F$ y6 F如果我们可以控制的区间范围 是 [1, n] 最少砝码为x个
: \8 [6 s- @: [此时我们想扩大区间范围就只可以增加砝码1 G& H! j. F$ I) c1 o" ~: @
假设增加的砝码重量为 k
d) @3 F: r: d- @0 ^* U因为我们可以控制 [1, n] 的重量, 而且因为可以把砝码放在左右两把, 想当于我们可以进行加减操作 P# x+ [$ W- l
所以新增砝码后, 我们又可以控制[k - n, k + n] 的区间范围了 V, x3 C0 A' l9 [. m: j* ~9 R+ v: N
8 [& e2 s# V) g( j7 e- Y, ]' @
让这个新增的控制范围 与 我们原来的可以控制的范围相邻, 就得到了最大的可控范围. h' a! @* V# _2 _
* e5 X2 M% W ?" G# Q% |另 n + 1 = k - n k = 2n + 1
' o+ |- L3 j0 ~, b那么x + 1可以控制的最范围就是[1, 3n + 1]: ^( Y; t( m( L& @( ` w
. x% K8 p5 l6 G- y2 J1 d2 b) c5 n7 G8 b) d9 z7 N a
4 v" H! z# L& k: \5 z |
zan
|