Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 22

редактирование Треугольника Паскаля (используя массивы)

18.01.2016, 16:43. Показов 7101. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
Столкнулся с очередной проблемой, которую не могу решить, поэтому прибегаю к помощи профессионалов)

Собственно задание такое, создайте и выведите на консоль треугольник Паскаля (вида елочки), примерно такого вида:
Java
1
2
3
4
5
6
7
8
       
        1
       1 1
      1 2 1
     1 3 3 1
    1 4 6 4 1
  1 5 10 10 5 1
 1 6 15 20 15 6 1
У меня получилось сделать только отображение слева направо, подскажите, как можно изменить мой код, чтобы треугольник был изображен в виде елочки. В данный момент вид такой:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public static void printPascalDreieck2(int n) {
        
        int zeile = n;
 
        int[][] arr = new int[zeile][];
        arr[0] = new int[1];
        arr[1] = new int[2];
        arr[1][0] = arr[1][1] = 1;
        System.out.print(arr[0][0] = 1);
        System.out.print("\n");
        System.out.print(arr[1][0] + " " + arr[1][1] + "\n");
        for (int i = 2; i < zeile; i++) {
            arr[i] = new int[i + 1];
            System.out.printf((arr[i][0] = 1) + " ");
            for (int j = 1; j < i; j++) {
                System.out
                        .print((arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j])
                                + " ");
            }
            System.out.println(arr[i][i] = 1);
        }
    }
 
    public static void main(String[] args) { 
        printPascalDreieck2(7);
        
    }
}
Заранее благодарен!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.01.2016, 16:43
Ответы с готовыми решениями:

Построить треугольник Паскаля. Используя треугольник Паскаля, вычислить 𝑘−ое число Фиббоначчи. Нумерация чисел Фиббона
#include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;Russian&quot;); int n; //ввод кол-ва строк в...

Создание треугольника Паскаля
Даны два числа n и m. Создайте двумерный массив и заполните его по следующим правилам: Числа, стоящие в строке 0 или в столбце 0 равны 1...

Вычисление Треугольника Паскаля
Задача: Треугольник Паскаля - это бесконечная треугольная матрица, в которой каждая n-я строка содержит ровно n целых чисел - биномиальные...

9
Творение дьявола
 Аватар для Virus dena
23 / 23 / 3
Регистрация: 30.08.2015
Сообщений: 157
18.01.2016, 17:12
Vipcars, а число элементов на каждой строке указать не пробовали?
0
0 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 22
18.01.2016, 17:26  [ТС]
Virus dena, не пробовал. Я пытаюсь сейчас отредактировать через printf, но пока не совсем удачно)
0
10 / 11 / 6
Регистрация: 11.05.2015
Сообщений: 101
18.01.2016, 17:38
создать массив пустых стрингов, 6 штук, и выводить в цыкле между строками 12-13 в порядке убивания, создав счетчик и уменьшая его на 1 после полного прохода всех итераций цикла
0
7 / 7 / 3
Регистрация: 19.08.2015
Сообщений: 76
18.01.2016, 17:42
1) Сначала делаем метод, определяющий количество разрядов в числе.
Что мне первое в голову пришло, это создать цикл, в котором с каждым шагом число, в котором мы пытаемся узнать количество разрядов, делится на 10 и результат записывается в формате double. После этого проверяем, является ли число меньшим чем единица. Если является, то прерываем цикл и количеством разрядов является количество итераций +1. То есть, если до второй итерации не дошло, и начальное значение переменной цикла i было 0, то количество разрядов равно i + 1 = 1, если цикл прервался после одного прохода, i + 1 = 2.
2) Создаём метод, вычисляющий длину вашей строки. Этот метод принимает на вход одномерный массив. Сначала вычисляем количество цифр, то есть суммируем результаты созданного в первом пункте метода от каждого значения в строке массива. Далее считаем количество пробелов. Оно равняется количеству чисел в строке массива -1. Суммируем оба получившихся значения.
3) Создаём одномерный массив, равным количеству строк в вашем массиве. В этом массиве будет указываться количество пробелов, которое нужно будет поставить перед выводом строк вашего массива.
4) Чтобы начать заполнять вышеуказанный массив, необходимо начать с вычисления длины самой длинной строки, то есть последней. Для этого просто применяем к ней метод во втором пункте.
5) Чтобы заполнить каждый элемент массива, необходимо выполнить три шага. Вычисляем длину строки по методу во втором пункте. Вычитаем это значение из самой длинной строки. Результат делим пополам(нужно проверять, не является ли делимое нулём). В результате деления получаем количество пробелов, которое необходимо поставить перед каждой строкой. В случае нечётного числа, оно округляется в меньшую сторону и нас это устраивает. Надеюсь, использовать получившийся массив с количеством пробелов вы сможете самостоятельно.
0
Творение дьявола
 Аватар для Virus dena
23 / 23 / 3
Регистрация: 30.08.2015
Сообщений: 157
18.01.2016, 17:47
Vipcars, уже заметила)

Добавлено через 32 секунды
RentrAnt, там всего строк 7

Добавлено через 1 минуту
Vipcars, а если к длине строки каждый раз прибавлять по одному?

Добавлено через 1 минуту
Bochkarev, можно пример кода? А то как - то все сложно у Вас(
0
7 / 7 / 3
Регистрация: 19.08.2015
Сообщений: 76
18.01.2016, 18:41
Вряд ли пример кода поможет понять, я могу просто описать иными словами.
Чтобы более-менее точно определить количество пробелов, которое необходимо поставить перед каждой строкой, нужно сначала вычислить длину самой большой строки, то есть посчитать количество пробелов в ней и количество цифр, посчитав, что ширина цифры примерно равна ширине пробела. Далее вычисляем количество недостающих пробелов, отнимая от самой длинной строки длину заданной, потом делим это количество этих пробелов на два, так как они в каком-то смысле с двух сторон и округляем в меньшую сторону - это и есть число пробелов, которое нужно поставить перед строкой.
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
18.01.2016, 23:43
Лучший ответ Сообщение было отмечено Vipcars как решение

Решение

Vipcars, ну не знаю, далеко от совершенства, но что-то вроде того получилось:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    public static int[][] pasReliz(int n) {
        int d = n;
        int[][] pas = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i + 1; j++) {
                if (j == 0 || j == i) {
                    pas[i][j] = 1;
                } else {
                    pas[i][j] = pas[i - 1][j - 1] + pas[i - 1][j];
                }
                String co = " %" + d + "d";
                if (j == 0) {
                    System.out.printf(co, pas[i][j]);
                } else {
                    System.out.printf(" %d", pas[i][j]);
                }
            }
            System.out.println();
            d--;
        }
        return pas;
    }
 
    public static void main(String[] args) {
        pasReliz(7);
    }
}
 
//       1
//      1 1
//     1 2 1
//    1 3 3 1
//   1 4 6 4 1
//  1 5 10 10 5 1
// 1 6 15 20 15 6 1

может попробовать другие коэффициенты подобрать... Пока что только такой вариант...

Добавлено через 52 минуты
Ok! Вот при таких параметрах ещё туда-сюда получается:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    public static int[][] pasReliz(int n) {
        int d = n * 2;
        int[][] pas = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i + 1; j++) {
                if (j == 0 || j == i) {
                    pas[i][j] = 1;
                } else {
                    pas[i][j] = pas[i - 1][j - 1] + pas[i - 1][j];
                }
                String co = " %" + d + "d";
                if (j == 0) {
                    System.out.printf(co, pas[i][j]);
                } else {
                    System.out.printf("%4d", pas[i][j]);
                }
            }
            System.out.println();
            d -= 2;
        }
        return pas;
    }
 
    public static void main(String[] args) {
        pasReliz(10);
    }
}
вывод приблизительно вот такой:
Java
1
2
3
4
5
6
7
8
9
10
                    1
                  1   1
                1   2   1
              1   3   3   1
            1   4   6   4   1
          1   5  10  10   5   1
        1   6  15  20  15   6   1
      1   7  21  35  35  21   7   1
    1   8  28  56  70  56  28   8   1
  1   9  36  84 126 126  84  36   9   1

Как-то так... До тринадцати работает нормально, потом начинает сливаться нижняя строка... Увы. Ну уж дальше сами справитесь, я полагаю.
1
0 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 22
19.01.2016, 00:54  [ТС]
Bochkarev, спасибо за идею, в теории все ясно, но очень трудно реализовать) HOBATOP, спасибо за решение!
0
7 / 7 / 3
Регистрация: 19.08.2015
Сообщений: 76
19.01.2016, 14:55
Лучший ответ Сообщение было отмечено Vipcars как решение

Решение

Может быть сделать чуть сложнее, зато треугольник довольно симметричный получается даже с большим количеством строк.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
public class PascalTriangle {
    public static void main(String[] args) {
 
        final int linesCount = 33;
        int pascalTriangle[][] = getPascalTriangle(linesCount);
 
        for (int array[]: pascalTriangle) {
            System.out.print(getSpaces(array, getLineLength(pascalTriangle[linesCount - 1])));
            for (int var: array) {
                if (var != 0) {
                    System.out.print(var + " ");
                }
            }
            System.out.println();
        }
    }
 
    static int getDigitsCount(int value) {
        int digitCounter = 1;
        for (int divider = 10; digitCounter < 10000; digitCounter++, divider *= 10) {
            if (value / divider < 1) {
                break;
            }
        }
        return digitCounter;
    }
 
    static int getLineLength(int line[]) {
        int length = -1;
        for (int value : line) {
            if (value == 0) {
                break;
            }
            length++;
            length += getDigitsCount(value);
        }
        return length;
    }
 
    static String getSpaces(int line[], int maxLineLength) {
        String spaces = "";
        int spaceCount = maxLineLength - getLineLength(line);
        spaceCount /= 2;
        for (int i = 0; i < spaceCount; i++) {
            spaces += " ";
        }
        return spaces;
    }
 
    static int[][] getPascalTriangle(int height) {
        if (height == 0) {
            System.out.println("take your exception");
            return null;
        }
        int pascalTriangle[][] = new int[height][height];
 
        for (int mainVar = 0; mainVar < height; mainVar++) {
            for (int secondVar = 0; secondVar < mainVar + 1; secondVar++) {
                try {
                    pascalTriangle[mainVar][secondVar] =
                            pascalTriangle[mainVar - 1][secondVar - 1] + pascalTriangle[mainVar - 1][secondVar];
 
                } catch (ArrayIndexOutOfBoundsException ex) {
                    if (secondVar == 0) {
                        pascalTriangle[mainVar][secondVar] = 1;
                    } else {
                        System.out.println("WAT1");
                    }
 
                } catch (NullPointerException ex) {
                    if (secondVar == mainVar) {
                        pascalTriangle[mainVar][secondVar] = 1;
                    } else {
                        System.out.println("WAT2");
                    }
                }
            }
        }
        return pascalTriangle;
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.01.2016, 14:55
Помогаю со студенческими работами здесь

Построить n строк треугольника Паскаля
построить n строк треугольника Паскаля

Построить n строк треугольника Паскаля
Построить n строк треугольника Паскаля.Люди, кто может, помогите решить плиз, очень нужно. 1 1 1 1 ...

Вывод значения из треугольника паскаля
Нужна программа, которая принимает 2 значения (строку и номер, тоесть координаты значения) и возвращает значение, находящееся в заданом...

Построить n строк треугольника Паскаля
Треугольник Паскаля строится следующим образом. Первая строка состоит из одного числа, равного единице. Каждая следующая содержит на одно...

Построить n-ю строку треугольника Паскаля
Пожалуйста,помогите срочно с прогой. Нужно построить n-ю строку треугольника Паскаля Как построить весь треугольник я знаю ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru