0

我将如何解决这个问题?

程序应该包含函数的定义sumTri(cutOff)。该函数将 Tri 数字添加到总和中。

Tri 数字是每三个数字: ....只要 Tri 数字小于 cutOff,1, 4, 7, 10,该函数就会将连续的 Tri 数字... 添加到总和中。1, 4, 7,该函数返回这些数字的总和。

4

2 回答 2

5

这很简单:

def sumTri(cutOff):
  return sum(range(1,cutOff,3))

或者,当您需要它时:

def sumTri(cutOff):
  sum = 0
  tri = 1
  while tri < cutOff:
    sum += tri
    tri += 3
  return sum

我会试着解释一下这两种灵魂。

在第一种情况下,您使用 Python 的两个“高级”函数,它们都可以为您工作:sumrange. 该range(a,b,c)函数生成一个数字列表,从a到之间b的步长c。例如:

In [1]: range(1,10,3)
Out[1]: [1, 4, 7]

In [2]: range(1,22,3)
Out[2]: [1, 4, 7, 10, 13, 16, 19]

您必须在此处注意range生成数字,直到列表中的数字小于b,而不是小于或等于。正是您的任务所需要的。

显然计算并sum返回它作为参数的列表中数字的总和:

In [3]: sum([1])
Out[3]: 1

In [4]: sum([1,2])
Out[4]: 3

In [5]: sum([1,2,3])
Out[5]: 6

现在您只需将这两个功能结合起来:

return sum(range(1,cutOff,3))

第二种解决方案更“低级”和“算法”。你在这里没有使用特殊的 python 函数,一切都自己做。

您使用两个变量来计算总和:

  • sum-- 存储总和的变量
  • tri-- 逐步添加的具有当前数字值的变量

当你写这样的东西时:

a = a + 5

这意味着:“现在我想a等于a之前加 5”或“增加a5”。你可以写得更短:

a += 5 

这两种形式是等价的。

但是你不需要简单的添加一些东西。你需要做很多次,直到事情发生。在 python 中,您可以使用while

while someting-is-true:
  do-something

每次while检查something-is-true条件,当它为真时,它会发出低于while(缩进)的命令 ie do-something

现在您知道了编写解决方案所需的一切:

def sumTri(cutOff):
  sum = 0                      # we start the sum from 0
  tri = 1                      # and the first number to add is 1
  while tri < cutOff:          # next number to add < cutOff?
    sum += tri                 # than add it to sum
    tri += 3                   # and increase the number by 3
  return sum                   # now you have the result, return it

这就是完成这项工作的功能。现在您可以使用该功能了。你是怎么做到的?

def sumTri(cutOff):
  ...

# anywhere in you program:
# presuming a is the cutOff
print sumTri(a)

当您想运行该函数并使用其结果时,您只需编写function_name(args).

于 2012-06-18T04:07:25.377 回答
4

这个数列与三角数有关

这是一个 O(1)

def sumTri(cutoff):
    n = (cutoff+1)//3
    return (3*n-1)*n//2
于 2012-06-18T04:21:04.130 回答