пирамида из чисел на java

нужно построить такую пирамиду для любого введенного числа,заранее спасибо введите сюда описание изображения


Ответы (2 шт):

Автор решения: JackFromBB

Конечно тот ещё говонокод, но реализация через циклы приходит на ум первой

    //Число для отображения
    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();
    }
→ Ссылка
Автор решения: entithat

Алгоритм такой:

  1. Добавим цикл на n*2-1 итераций, т.к. каждая строка повторяется дважды, кроме той, где есть все n цифр.

  2. Дальше создаем (или в нашем случаи "обнуляем" строку), сразу добавляя ей n - i пробелов. *Мы должны использовать модуль, т.к. n - i может возвращать отрицательное число, когда i > n, а метод repeat() не принимает отрицательные числа.

    Почему |n - i|? Потому, что минимальное число, которое выйдет будет |5 - 1| = 4, 4 пробела для первой строки. А среднее |5 - 5| = 0, для строки, где все цифры. Ну и максимальное |5 - 9| = 4. Впринципе, нам подходит.

  3. И последнее, мы должны добавить сами цифры в реверсе. Делаем так же, но не забываем о 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);
}
→ Ссылка