持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
题目描述1
问题描述
你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意 小于等于 NN 的正整数重量。
那么这套砝码最少需要包含多少个砝码?
注意砝码可以放在天平两边。
输入格式
输入包含一个正整数 N。
输出格式
输出一个整数代表答案。
样例输入
7
样例输出
3
样例说明 3 个砝码重量是 1、4、6可以称出 1 至 7的所有重量。 1 = 1;1=1; 2 = 6 − 4(天平一边放 6,另一边放 4); 3 = 4 − 1; 4 = 4; 5 = 6 − 1; 6 = 6; 7 = 1 + 6; 少于 3 个砝码不可能称出 1 至 7 的所有重量。
评测用例规模与约定 对于所有评测用例,1 ≤ N ≤ 1000000000。
运行限制
最大运行时间:1s
最大运行内存: 512M
解题思路1
砝码 重量 总重量
1 1 1
2 3 4
3 9 13
4 27 40
cnt+=1 weight*=3 total+=weight
源码分享1
#数论-最少砝码
n=int(input())#7
cnt,weight,total=1,1,1
while total<n:
weight*=3
total+=weight
cnt+=1
print(cnt)#3
题目描述2
你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W_1, W_2, · · · , W_N 。 请你计算一共可以称出多少种不同的重量? 注意砝码可以放在天平两边。 输入格式 输入的第一行包含一个整数 NN。 第二行包含 NN 个整数:W_1, W_2, W_3, · · · , W_N 。 输出格式 输出一个整数代表答案。
样例输入
3
1 4 6
样例输出
10
解题思路2
暴力求解问题:
- 创建三个列表l1、l2以及l3,从l1开始依次进行遍历,然后将l1中的元素和l2中的元素进行相加或者相减,将l3中没有的结果添加到l3中去
- 一次循环结束后,此时l3中有l1和l2中的元素相减相减后的结果,此时我们将l3中存在且l2中不存在的元素添加到l2中去,因为砝码并不只是两两相加减,还可以多个进行相加减,这样在后续的遍历中,此时l1就相当于和l2中之前已经相加一次的结果再进行加减,全方位进行寻找。
源码分享2
n = int(input())
l1 = list(map(int, input().split()))
l2 = []
l2.append(l1[0])
l3 = []
l3.append(l1[0])
for i in l1[1:]:
for q in l2:
if i not in l3:
l3.append(i)
if (i + q) not in l3:
l3.append(i + q)
if abs(i - q) not in l3 and abs(i - q) != 0:
l3.append(abs(i - q))
for p in l3: # 此时l3中含有几个砝码加和或者相减之后的结果
if p not in l2:
l2.append(p)
print(len(l3))
学习总结
🏅今天是我在Python训练营的第 34 天,希望每天都能见到最棒的你🏅
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~