Stepik - 4.1. Непрерывные слагаемые
Описание задачи
По данному числу 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();
}
}