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