当前位置 : 主页 > 编程语言 > python >

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

来源:互联网 收集:自由互联 发布时间:2022-06-18
???????????????????????? ????????????Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照???????????? ????????????Python领域优质创 作者 ,欢迎大家找我合作学习(文末有VX 想进学习交流群o


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


????????????????????????
????????????Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照????????????
????????????Python领域优质创作者,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++)
????​​入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!????????????​​ ????​​最后,愿我们都能在看不到的地方闪闪发光,一起加油进步????????????​​ ????????????“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~????????????
????????????✨✨✨



​​前言:​​【Python训练营】是针对Python语言学习所打造的一场​刷题狂欢party!​ 对基础知识把握不牢固的话,欢迎参考此套课程:​​​Python公开课​​​ 搭配使用最佳嗷~喜欢的话就抓紧订阅起来吧!????????????如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信或者在文末添加我的VX,我会拉你进学习交流群,我们一起交流学习,报团打卡



Python每日一练:

  • ​​题目描述1​​
  • ​​解题思路1​​
  • ​​源码分享1​​
  • ​​题目描述2​​
  • ​​解题思路2​​
  • ​​源码分享2​​
  • ​​学习总结​​


题目描述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 天,希望每天都能见到最棒的你????​​


???????????? 好啦,这就是今天要分享给大家的全部内容了

❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~

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

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



网友评论