Не должны повторяться перестановки - значит для каждого множества слагаемых {a, b, c} можно найти множество {a', b', c'}, образованное перестановкой элементов исходного множества, такое, что a'<=b'<=c'. Значит каждый следующий вложенный цикл должен начинаться не с 1, а со значения итератора предыдущего цикла.
---
Подумал ещё:
При условии
a<=b<=c,
a+b+c=n значение
a не может быть больше
n/3, иначе
b либо
c будут б̶о̶л̶ь̶ш̶е меньше, чем
a.
Значение
b не может быть больше, чем
(n-a)/2, иначе
c будет б̶о̶л̶ь̶ш̶е меньше
b.
Значение
c будет равно
(n-a-b).
Итого, получаем
int n = Integer.parseInt(reader.readLine());
for (int i = 1; i <= n/3; i++) {
for (int j = i; j <= (n-i)/2; j++) {
System.out.println("Числа " + i + " + " + j + " + " + (n-i-j));
}
}