【Python训练营】Python每日一练----第34天:砝码问题

举报
是Dream呀 发表于 2022/03/11 10:47:57 2022/03/11
【摘要】 📢📢📢📣📣📣🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜🏅🏅🏅Python领域优质创作者,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++)💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺🍉🍉🍉“一万...

在这里插入图片描述

📢📢📢📣📣📣
🌻🌻🌻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 天,希望每天都能见到最棒的你🏅

🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~
在这里插入图片描述
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。