0
点赞
收藏
分享

微信扫一扫

题目 2612: 蓝桥杯2021年第十二届省赛真题-最少砝码(枚举找规律+递推)

小美人鱼失去的腿 2022-03-21 阅读 29
算法递推

文章目录

Question

题目描述
你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量。那么这套砝码最少需要包含多少个砝码?
注意砝码可以放在天平两边。
输入
输入包含一个正整数 N。
输出
输出一个整数代表答案。
样例输入
7
样例输出
3
提示
【样例说明】
3 个砝码重量是 146,可以称出 17 的所有重量。
1 = 12 = 6 4 (天平一边放 6,另一边放 4)3 = 4 14 = 45 = 6 16 = 67 = 1 + 6;
少于 3 个砝码不可能称出 17 的所有重量。
【评测用例规模与约定】
对于所有评测用例,1 ≤ N ≤ 1000000000

Ideas

一开始想的是二分
后来发现不知道如何判断是否能表达1-n的数
就开始打表找规律 发现第i个砝码能表示的最大数是第i-1个砝码能表示的最大数的三倍+1 递推即可

Code

def f(n):
    '''
    n>=2 f(n)代表砝码数为n的时候最大能表示的数 f(1) = 1 # 递推
    称1    需要1个砝码    砝码重量1
    称2    需要2个砝码    砝码重量1 2
    称3    需要2个砝码    砝码重量1 2
    称4    需要2个砝码    砝码重量1 3
    称5     需要3个砝码    砝码重量1 2 3
    称6     需要3个砝码    砝码重量1 2 3
    称7     需要3个砝码    砝码重量1 3 6
    称8     需要3个砝码    砝码重量1 5 7
    称9     需要3个砝码    砝码重量1 3 8
    称10     需要3个砝码    砝码重量1 3 8
    称11     需要3个砝码    砝码重量1 3 8
    称12     需要3个砝码    砝码重量1 3 8
    称13     需要3个砝码    砝码重量1 3 9
    '''
    if n == 1:
        return 1
    return f(n-1) * 3 + 1
    
while True:
	try:
		n = int(input())
		res = 1
		while f(res) < n:
		    res += 1
		print(res)
	except:
		break
举报

相关推荐

0 条评论