[英]How do you get all the combinations of n numbers divisible by 10 and whose sum is 100?
[英]Can't get the sum of all numbers below n divisible by either 3 or 5
下面的程序给出了在给定输入数字下可以被 3 或 5 整除的所有数字的总和。 我面临的问题是 n = 100 的总和不正确 output。n = 100 的解应该是 2318,但我的程序给了我 2633。我无法弄清楚这个问题,因为它也给出了n = 10 的右和正确。
#!/bin/python3
import sys
import math
arr = []
sum1 = 0
sum2 = 0
t = int(input().strip())
while t < 1 or t > 10**5:
print()
t = int(input().strip())
for i in range(t):
n = int(input().strip())
arr.append(n)
for x in range (0, len(arr)):
sum1 = 0
sum2 = 0
for b5 in range (0, arr[x], 5):
sum1 = sum1 + b5
for b3 in range (0, arr[x], 3):
sum2 = sum2 + b3
sum = sum1 + sum2
print(sum)
编辑:在所有好的反馈之后,我想出了一个想法来排除在原始程序中被添加两次的数字,方法是添加一个 if 语句,如下所示:
for b5 in range (0, arr[x], 5):
sum1 = sum1 + b5
if b5%3 == 0:
sum1 = sum1 - b5
for b3 in range (0, arr[x], 3):
sum2 = sum2 + b3
它不是那么优雅,但我仍然想添加它。
问题在于,这会使既是3 的倍数又是 5 的倍数的数字加倍。
简单的解决方案是从总和中减去这些。
请注意,您的循环有点矫枉过正,因为sum
function 可以直接将range
表达式作为参数。
所以:
n = 100
total = sum(range (0, n, 5)) + sum(range (0, n, 3)) - sum(range (0, n, 3*5))
print(total)
您可以通过使用三角数公式解决此问题来避免(隐式)循环:
def sum_mul(n, divisor):
quot = (n - 1) // divisor
return (quot * (quot + 1) // 2) * divisor
n = 100
total = sum_mul(n, 3) + sum_mul(n, 5) - sum_mul(n, 3*5)
print(total)
优秀的@trincot 答案很聪明 Python。为了完整起见,下面的循环答案显示了您的原始逻辑应该如何构建。
mysum = 0
limit = 100
for x in range(limit):
if (x % 5 == 0) or (x % 3 == 0):
mysum += x
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.