Описание задачи

По данному числу 1≤n≤10^9 найдите максимальное число k, для которого n можно представить как сумму k различных натуральных слагаемых. Выведите в первой строке число k, во второй — k слагаемых.

import java.util.Scanner;

/**
 * Main
 *
 * @author Vladislav Sidlyarevich <vlsidlyarevich@gmail.com>
 * Created on 3/7/21.
 */
public class Main {

    //По данному числу 1≤n≤10^9 найдите максимальное число k,
    //для которого n можно представить как сумму k различных натуральных слагаемых.
    //Выведите в первой строке число k, во второй — k слагаемых.
    public void run() {
        Scanner scanner = new Scanner(System.in).useDelimiter("\n");
        int n = Integer.parseInt(scanner.nextLine());

        scanner.close();
        String result = calculate(n);
        System.out.println(result.trim().split("\\s").length);
        System.out.println(result.trim());
    }

    private String calculate(int n) {
        if (n == 1) return "1";
        if (n == 2) return "2";
        int max = n;
        StringBuilder builder = new StringBuilder();

        for (int i = 1; i != max; i++) {
            if (n - i <= i) {
                builder.append(" ").append(n);
                break;
            }

            builder.append(" ").append(i);
            n -= i;
        }

        return builder.toString();
    }

    public static void main(String[] args) {
        Main main = new Main();
        main.run();
    }
}