取三个不相同的数,要求和为2024,一共有多少种情况
三个不一样的数,一定有大有小,所以可以直接暴力搜索,三个for循环分别搜索三个数,三个数大小为i<j<k
ans = 0
for i in range(1, 2024):
for j in range(i + 1, 2024):
for k in range(j + 1, 2024):
if i+j+k == 2024:
ans = ans + 1
print(ans)#340370
确定了两个数并且和为2024就能确定第三个数为2024-i-j,可以减少一个for循环遍历,但是需要保证2024-i-j是最大的,不然会有重复的情况
ans = 0
for i in range(1, 2024):
for j in range(i + 1, 2024):
if (2024 - i - j) > j:
ans = ans + 1
print(ans) # 340370
还可以进行剪枝,2024/3=674.6,最小的数一定小于平均数,所以i的范围可以缩小到1到674,第二小的数最大的时候是当最小的数取1时,剩下两个数和为2023,2023/ 2=1011.5,所以第二小的数范围可以缩小到i到1011
ans = 0
for i in range(1, 675):
for j in range(i + 1, 1012):
if (2024 - i - j) > j:
ans = ans + 1
print(ans) # 340370