尽可能多的成对的不同正整数之和

问题描述

任务。这个问题的目的是将给定的正整数表示为尽可能多的成对的不同正整数之和。也就是说,找到最大的?,使得?可以写成?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