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。。


:::
:::
:::