数学建模社区-数学中国
标题:
最少砝码 Java解决
[打印本页]
作者:
2744557306
时间:
2024-3-29 16:40
标题:
最少砝码 Java解决
问题描述】
! F* m4 s! X& O4 B& Z1 \1 C! p
你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量。
& x( O! e h3 `$ }# W0 s+ q
那么这套砝码最少需要包含多少个砝码?
' ~) s) c, q2 U' j, z1 d% B
注意砝码可以放在天平两边。
) G1 z0 X9 Q8 i
) Y" R, G* t$ G2 }+ W) X( J+ D. U
【输入格式】
: y! v% q3 ^0 G- Q
输入包含一个正整数 N。
0 m6 P( N, j/ g& u" u! E+ z
) R; O4 X: {: L6 i0 [
【输出格式】
2 z' C: h3 ?% u" X ]( h; v' r
输出一个整数代表答案。
\' l/ k- U2 ^* L7 \" w
9 j# f3 V' U. G( C' p
【样例输入】
; i1 z: `0 m `; Q" m5 \) g( j' J
7
) o6 R6 M$ I4 W+ {5 N! Q
2 O* o$ a2 y- e- D% A
【样例输出】
3 p4 e0 {3 H. c/ _) h( ]
3
. j1 \! G/ z6 M0 H
: g! F, C% W+ h: ~
【样例说明】
+ g8 ^' E% d& V M
3 个砝码重量是 1、4、6,可以称出 1 至 7 的所有重量。
9 g) t, H8 v# w1 R ?# Z. f+ e
1 = 1;
+ F; T+ i# q! U4 S/ l
2 = 6 − 4 (天平一边放 6,另一边放 4);
/ X: [- i$ |8 [/ ^8 P0 G5 r& F
3 = 4 − 1;
$ D! `( Q1 R% P7 K+ k8 |' C( D; z
4 = 4;
* Z$ N8 ]0 z3 v( Q R
5 = 6 − 1;
$ S7 q2 d3 G$ l9 p1 p( ^0 l
6 = 6;
7 t/ y. c! _! q2 j K2 |
7 = 1 + 6;
" d0 y* I) U$ o+ w) N8 O1 I- c* }) w
少于 3 个砝码不可能称出 1 至 7 的所有重量。
import java.util.Scanner;
# r* f" I2 E) U+ E$ V% \4 W/ K
public class Main {
9 k/ b: R, x) l6 d: N/ }4 [0 T' w
public static void main(String[] args) {
6 \ i; a% D" @+ Q! [' {
int n = new Scanner(System.in).nextInt();
/ b3 D! @* T; L" @
int maxWeight = 1, minCnt = 1;
# g( E R* J1 f# u' y* J
while (maxWeight < n) {
/ I0 E5 ^( |' X
maxWeight = maxWeight * 3 + 1;
( S5 [ @8 `5 i0 G3 T
minCnt++;
x0 u$ n5 x5 Y; x$ k3 P
}
; C3 v! Z& h# g- V. L% S2 ^
System.out.println(minCnt);
; {" w' w/ [6 n0 }! R
}
* N. u) ~4 N7 H0 ^2 R! b
}
- {$ ~- ]3 X/ Y# D9 O1 r( j
复制代码
题解
( t% D8 z% F# a
如果我们可以控制的区间范围 是 [1, n] 最少砝码为x个
8 }- J# J9 ?$ l6 P
此时我们想扩大区间范围就只可以增加砝码
/ K, b0 u/ u& s$ T- t; Y' o% R
假设增加的砝码重量为 k
6 |% z, G: ?( g/ T7 i7 B
因为我们可以控制 [1, n] 的重量, 而且因为可以把砝码放在左右两把, 想当于我们可以进行加减操作
- [5 o+ ~/ K8 _, Q
所以新增砝码后, 我们又可以控制[k - n, k + n] 的区间范围了
. F Z5 E, M Y; F: k
) _5 R9 H* G, e
让这个新增的控制范围 与 我们原来的可以控制的范围相邻, 就得到了最大的可控范围
8 K3 f0 v( ^1 D, Z
' u* y2 C$ p4 O8 r( m
另 n + 1 = k - n k = 2n + 1
K# c7 H0 L4 S( A3 P5 G+ x5 n. V
那么x + 1可以控制的最范围就是[1, 3n + 1]
8 w6 W* ~+ A0 r7 h( m$ }
+ o2 j5 L- ?/ L
7 z: N( U& I# C5 A+ w4 C, i
: ]) v) o9 u- ~
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5