BC01
分析一下题目,编程解决的问题无非两类,一类计算、一类操作数据。
这是关于计算的题目。
题目大概是这样的:从(n 、n+1、 n+2 、n+3、 n+4
、.….n+t)其中n、t都为100以内的正整数,这个数组之和为318,求n的值。
。。有一种做小学数学题的感觉
这是要让计算机列举一下的意思,鄙人还不会用什么好的算法。想到了用循环,但半天写出的程序老是出错。。因为最近学C语言,就用C写,写又写不出来,又把Python给丢了。
看了答案发现代码确实简洁优美。
知识点一:for循环
在python 里,for循环是用来迭代序列的
一般用法\
=================
for 变量 in 序列
每次循环完了干嘛的语句
=================
变量的作用是在每次循环的时候,序列中的值会依次赋值给变量。然后你就可以用赋值了的变量做爱做的事了。
迭代序列的方式分为:
如果不想建立序列,只是想重复
==============
for i in range(重复数字):
print("hello")
==============
知识点二:range()是python提供的函数,该函数的参数是(开始--默认从0开始,结束,每次循环跳过多少数--默认为1)第一个参数和第三个参数可以省略。
如果只给一个参数,默认是结束的数,例如range(5) = [0,1,2,3,4,]
如果给两个参数,默认是开始和结束的数,例如range(3,5) = [3,4]
给三个参数,例如range(2,10,2) = [2,4,6,8]\
下面用编程来描述题目:建立一个累加值(常量)为318,取名为sum
有变量V每次逐渐递增,从0递增到某个数X,每次递增1。
有变量Z每次都加上变量V
有变量add值每次都加上(自身add加变量V的值)
这里用到for循环,循环到某次(所以要用到while语句),变量等于常量318的时候,循环结束
for start in range(100):
#显然开始的年龄不会大于100岁,序列就取个最大值100好了
v=0
end=0
add=0
while add<318
v=v+1 #变量V每次都地址1
start+=v #start每次都加上递增后的变量
add+=s #总数add是(start ,start+1, start+2, start+3.…)的和
if add==318:\
print s,v,end
\
::: {.image-package}
\
::: {.image-caption}
:::
:::
验证下,77+78+79+80+81=395 出问题了,不等于318
是V变量的问题,初始化的时候V=0,第一次循环v=1,这就不对了,应该从0开始。
::: {.image-package}
\
::: {.image-caption}
:::
:::
这就尴尬了。。78+79+80+81=318,没有问题。21*12+ 6*(12-1)=318
和答案也不一样答案是,start=13,end=28,不知道28算进去没有,是这次就不插了,还是28岁插生日蜡烛以后就不插了。算一下吧,不算28岁生日:13*(28-13)+
7*15=195+105=300
算28岁生日,13*(28-13+1) + 8*16 = 13*16+ 120=208+136=328
题目记错了,是328不是318。。
:::
:::
:::