【Python训练营】Python每日一练----第34天:砝码问题
📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜
🏅🏅🏅Python领域优质创作者,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++)
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟✨✨✨
前言:
【Python训练营】是针对Python语言学习所打造的一场刷题狂欢party! 对基础知识把握不牢固的话,欢迎参考此套课程:Python公开课 搭配使用最佳嗷~喜欢的话就抓紧订阅起来吧!🍋🍋🍋如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信或者在文末添加我的VX,我会拉你进学习交流群,我们一起交流学习,报团打卡
@TOC
题目描述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 天,希望每天都能见到最棒的你🏅
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~
- 点赞
- 收藏
- 关注作者
评论(0)