题目:
从1开始累加,
1+2+3+..... +? >1234567
? 是,使上面的式子成立的最小正整数。
求它的值。
先说答案 1571
,累加和为 1234806.0
1,第一种解法,不定次循环
i=0
he=0
while he<=1234567:
i+=1
he+=i
print(i,he)
1571 1234806.0
2,第二种解法
import itertools
la=(i for i in range(1234567))
print(type(la))
for i,j in enumerate(itertools.accumulate(la)):
if j>1234567:
print(j,i)
break
print(1571*1572/2)
#<class 'generator'>
#1234806 1571
#1234806.0
3,第三种解法
e=10000
a=1
def cc(a):
return a*(a+1)//2
x=0
while a<e:
m=a+e >>1 #左手写法的模板
x+=1
print(x,m)
if cc(m)<=1234567:
a=m+1
else:
e=m
print(e,a)
print(1571/13)
其实,用二分法,来计算,这是个13次计算问题,而我们计算 1571 次。差了120倍。
1,算法的重要性,懂时间复杂度,懂二分算法,左手写法
2,数学公式的重要性,懂,等差数列求和 ,懂估算
3,初始化的重要性
能够考虑的维度的多少,决定了能够实现业务代码的复杂度。
新闻摘要法,才是自顶向下,构建代码。
网友评论