题目描述:求出用1, 2, 5这三个数不同个数组合的和为100的组合个数,为了更好地理解题目目的的意思,下面给出几组可能的组合:100个1, 0个2, 和0个5, 他们的和为100; 50个1,25个2,0个5的和也为100,;50个1,25个2, 0个5的和也为100;50个1,25个2,0个5 的和也是100.
分析与解答:
方法一:暴力法
最简单的方法就是对所有的组合进行尝试,然后判断组合的结果是否满足和为100, 这些组合有如下的限制:1的个数最多为100个,2的个数最多为50个,5的个数最多为20个。实现思路为:遍历所有可能的组合1的个数x,(0<=x<=100), 2的个数y(0<=y <=50), 5的个数z(0<=z<=20), 判断x+2y+5z是否等于100,如果相等则满足条件。
def combinationCount(n):
count = 0
num1 = n
num2 = n/2
num5 = n/5
x = 0
while x <= num1:
y = 0
while y <= num2:
z = 0
while z <= num5:
if x+ 2*y + 5*z == n:
count += 1
z += 1
y += 1
x += 1
return count
if __name__ == "__main__":
print(combinationCount(100))
方法二:数字规律法
def combinationCount(n):
count = 0
m = 0
while m <= n:
count += (m+2)/2
m += 5
return int(count)
if __name__ == "__main__":
print(combinationCount(100))