最少砝码–2021蓝桥杯Java组
问题描述
你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意 小于等于 NN 的正整数重量。
那么这套砝码最少需要包含多少个砝码?
注意砝码可以放在天平两边。
输入格式
输入包含一个正整数 N。
输出格式
输出一个整数代表答案。
样例输入
7
样例输出
3
样例说明
33 个砝码重量是 1、4、61、4、6,可以称出 11 至 77的所有重量。
1 = 1;1=1;
2 = 6 − 42=6−4(天平一边放 66,另一边放 44);
3 = 4 − 1;3=4−1;
4 = 4;4=4;
5 = 6 − 1;5=6−1;
6 = 6;6=6;
7 = 1 + 6;7=1+6;
少于 33 个砝码不可能称出 11 至 77 的所有重量。
评测用例规模与约定
对于所有评测用例,1 ≤ N ≤ 10000000001≤N≤1000000000。
运行限制
最大运行时间:1s
最大运行内存: 512M
分析:
本题最核心的点为:平衡三进制
任意一个数字可以由多个3的n次方的和(差)表示
AC代码:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
long x = scan.nextLong();
long sum = 0, times = 0;
while(sum < x){
sum += Math.pow(3, times);
times++;
}
System.out.println(times);
}
}