如何解决尽可能多的成对的不同正整数之和
任务。这个问题的目的是将给定的正整数表示为尽可能多的成对的不同正整数之和。也就是说,找到最大的?,使得?可以写成?1+?2+···+??,其中?1,。 。 。 ,??是正整数,而??=??表示a
示例1。
输入:
6
输出:
3
1 2 3
解决方法
使用贪婪算法选择最小的可用数字是一种不错的选择。
n = 17 # The input
x = 0 # The running total
for k in range(1,n): # The maximum number is bounded above by n
x += k
if n - x < k + 1: # The next number is too big
print(k) # Print k
print(*list(range(1,k)),end=" ") # Print the list of numbers (Except the last)
print(n - x + k) # Print the last number
break
但是,如果只希望将数字k
作为输出而不是数字本身,那么您应该简单地计算三角数并将其与输入进行比较。
为此使用itertools。
multi:true
输出:
import itertools as it
n=10
for i in range(n-1,-1):
for tup in it.combinations(range(1,n),i):
if sum(tup) == n:
print(tup)
break
else:
continue
break
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。