我已经设法使代码工作,但我相信它可以优化。。。很多
输入是一个用空格分隔的数字字符串。类似于-4 2 8 6
或1 2 3 4 5 6 7
的东西
它必须找到与此condition a + b == c
匹配的3个数字。虽然'b'
始终位于'a'
的右侧,并且for every time the condition is met
在控制台上以以下格式打印数字-'a + b == c'
。如果没有任何匹配项,请打印“否”
唯一的限制是'b'
距离'a'
至少有一个索引
这就是我想到的
lineOfNums = input('Line of numbers: ') # User input: example - 4 2 6 8
arrNums = lineOfNums.split()
conMet = False # Is the condition met at least once
for a in range(0, len(arrNums)):
for b in range(a + 1, len(arrNums)):
for c in range(0, len(arrNums)):
if int(arrNums[a]) + int(arrNums[b]) == int(arrNums[c]):
print(f'{arrNums[a]} + {arrNums[b]} == {arrNums[c]}')
conMet = True
if conMet == False: print('No')
首先,在创建
arrNum
时进行一次整数转换,而不是每次都通过循环外部循环只需要转到
len(arrNums)-1
,因为它需要为它右边的B
留出空间你可以用
itertools
来做,当然首先要转换成intfrom itertools import combinations
此算法的大O平均为
O(n^2)
,它来自O(n choose r)
,其中n
是输入的数量(本例中为4),而r
是求和的数字计数,在本例中为2相关问题 更多 >
编程相关推荐