пирамида из чисел на java
Ответы (2 шт):
Конечно тот ещё говонокод, но реализация через циклы приходит на ум первой
//Число для отображения
final int number = 5;
//Кол-во пробелов
int probel = number;
for(int p=probel;p>0;p--){
//Добавляем пробелы
for(int add_probel=1;add_probel<p;add_probel++)
System.out.print(" ");
//Добавляем числа
for(int i=number-(p-1);i>0;i--){
System.out.print(""+i);
}
System.out.flush();
}
for(int p=1;p<probel;p++){
//Добавляем пробелы
for(int add_probel=0 ; add_probel<p ; add_probel++)
System.out.print(" ");
//Добавляем числа
for(int i=number-(p);i>0;i--){
System.out.print(""+i);
}
System.out.flush();
}
Алгоритм такой:
Добавим цикл на
n*2-1итераций, т.к. каждая строка повторяется дважды, кроме той, где есть всеnцифр.Дальше создаем (или в нашем случаи "обнуляем" строку), сразу добавляя ей
n - iпробелов. *Мы должны использовать модуль, т.к.n - iможет возвращать отрицательное число, когдаi > n, а методrepeat()не принимает отрицательные числа.Почему
|n - i|? Потому, что минимальное число, которое выйдет будет|5 - 1| = 4, 4 пробела для первой строки. А среднее|5 - 5| = 0, для строки, где все цифры. Ну и максимальное|5 - 9| = 4. Впринципе, нам подходит.И последнее, мы должны добавить сами цифры в реверсе. Делаем так же, но не забываем о
n - |n - i|. Следуя той же логике, что и выше,min(n - |n - i|) = 5 - |5 - 1| = 1, т.е. одна цифра в первой строке1и так же с максимальным5 - |5 - 9| = 1, 1 цифр в последнюю строку и т.д.
int n = 5;
String str = "";
for (int i = 1; i < n * 2; i++) {
str = " ".repeat(Math.abs(n - i));
for (int j = n - Math.abs(n - i); j > 0; j--) str += j;
System.out.println(str);
}
