蓝桥杯算法题练习

1、20世纪有多少个星期一

(1901、1、1——2000、12、31)

方法一:python代码

在这里插入图片描述

方法二:excel工具(设置单元格格式,把日期换成周几的形式)

在这里插入图片描述

2、100个数相乘,结果有几个0

在这里插入图片描述

3、切面条

在这里插入图片描述
在这里插入图片描述
找规律:对折次数=n
弯=2^n-1
面条数=弯+2=2^n+1
在这里插入图片描述

4、付账问题

在这里插入图片描述
解题思路:

这个问题有以下几种情况

1、如果每个人带的钱刚好是平均值,标准差最小,此时为0
2、有的人带的钱少于平均值,有的人带的多于平均值
*方差越小意味着大家付的钱差距越小越好,带钱少于avg的人把钱全部花掉,大于平均值的如果出钱一样就能方差最小。(此时并不是钱多的人出均值,或者其中几个钱多的人替钱少的人补上钱就能是最优解,要对当下要付的钱取平均才是最合适的,可以理解成钱多的人均摊得补上了钱少的人所付的钱)
贪心算法思想:做出当前看来最好的选择(局部最优),以达到最终最优的目的(全局最优)
在这里插入图片描述

代码
n,s=map(int,input().split())
l=list(map(int,input().split(",")))
print(n,s)#尽管输出是10 30 似乎是整数,但事实上是字符串
print(type(n))#因此借用map转换为int型
l.sort()#从小到大排序,方便后面操作
avg=s/n
sum=0
for i in range(n):
    if l[i]*(n-i)<s:#如果大家都按这个价出不够,说明小于当前的平均值,就要付全部的
        sum+=pow(l[i]-avg,2)
        s-=l[i]#更新s值,达到局部优化的目的
    else:
        curr_avg=s/(n-i)
        sum+=pow(curr_avg-avg,2)*(n-i)
        break#假设大家之后都按这个价格出,记得退出循环
print(sqrt(sum/n))
注意

在这里插入图片描述
input输入的都是子符串类型,要用map方法转成int型

5、python处理字符串问题

在这里插入图片描述
在这里插入图片描述
输出结果分别是
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解决TypeError: argument of type ‘int’ is not iterable错误

l=str(i)
#转化成字符串,不然会报
TypeError: argument of type ‘int’ is not iterable错误

以下两句代码得出的结果是不同的
if "2" or "0" or "1" or "9" in l:
if "2" in l or "0" in l or "1" in l or "9" in l:
原因:

对于第一句:
if “2” or “0” or “1” or “9” in l:

这里的or操作并不会按照我们期望的方式去检查l列表中是否包含"2", “0”, “1”, 或者 “9”。实际上,Python会首先计算"2" or “0” or “1”,由于非空字符串在布尔上下文中被视为True,这部分的表达式会立即返回第一个True值,也就是"2"。(这句话等价于if True) 然后,Python会检查"2" in l,如果l中包含"2",则整个条件为True;如果l中不包含"2",但由于"2"已经是一个True值,整个条件仍然会被视为True,而不会继续检查后面的"0", “1”, “9”。

对于第二句:
if “2” in l or “0” in l or “1” in l or “9” in l:

这里,每个in l的部分都会单独评估。只有当l中实际包含"2", “0”, “1”, 或者 "9"中的任意一个时,对应的条件才会为True。只有当所有条件都为False时,整个if语句的条件才会为False。

6、1~2020有多少个2

在这里插入图片描述
打印出来快速ctrl+f

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值