问题描述
你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意 小于等于 N 的正整数重量。
那么这套砝码最少需要包含多少个砝码?
注意砝码可以放在天平两边。
输入格式
输入包含一个正整数 N。
输出格式
输出一个整数代表答案。
样例输入
7
样例输出
3
样例说明
3 个砝码重量是1、4、6,可以称出 1 至 7的所有重量。
1=1;
2=6−4(天平一边放 6,另一边放 4);
3 = 4 − 1;
4 = 4;
5 = 6 − 1;
6 = 6;
7 = 1 + 6;
少于 3 个砝码不可能称出 1 至 7 的所有重量。
解答:其实这道题考的就是规律,只要找到规律这道题就是相当于加减乘除的难度级别了。但题目给出的样例混淆了人们的思维方式。
1个砝码只能称1这个重量,所以此时能称重的最大重量为1;
两个砝码时有以下情况:
1,2:1 = 1,2 = 2,3 = 1+2最大能称重到3;
1,3:1 = 1,2 = 3-1,3 = 3,4 = 1+3最大能称重的重量到4;
1,4:1 = 1,2无解,所以从4往后都都无法计算出2的重量。
所以两个砝码时,即(1,3)能称重的最大重量为4。
然后一次往后递推,可以得出三个砝码时(1,3,9)能称重的最大重量为13。
所以如下图,容易得出新增砝码的重量等于上一个砝码重量的三倍,最大重量就等于增加最后的砝码之前最大重量加上新增的砝码重量。
砝码数量:count每次递增一
砝码重量:weight *= 3 ,即上一个砝码的三倍重量即为新增砝码的重量
最大重量:total += weight,即增加砝码之前的最大重量加上新增砝码的重量
count,weight,total = 1,1,1
n = int(input())
while total < n:
count += 1 #计数,计算当前共用了几个砝码
weight *= 3 #砝码重量
total += weight #砝码能称出的最大重量
print(count) #输出使用的砝码个数