Поскольку задача выглядит очень сложной, на самом деле все просто. Это может показаться трудным в начале. Потому что вы думаете о конечном результате, а не о пути, который ведет к результату.
Чтобы изменить это, мы можем использовать старое правило кодирования разделяй и властвуй. Этот подход учит нас находить сходство в сложной проблеме, что позволяет свести основную проблему к простой задаче, которую мы способны выполнить. Другими словами, мы разбиваем нашу большую проблему на несколько более мелких, которые можно очень легко решить, и в конце мы объединяем маленькие результаты в один большой.
Так что не начинайте со своей проблемы.
Q1: Как напечатать пирамиду чисел?
Поскольку мы этого не знаем, давайте сосредоточимся на чем-то другом.
Чтобы улучшить наше наблюдение, мы можем добавить некоторые детали фона.
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7
0 _ _ _ _ _ _ _ _ 9 _ _ _ _ _ _ _ _
1 _ _ _ _ _ _ _ 8 9 8 _ _ _ _ _ _ _
2 _ _ _ _ _ _ 7 8 9 8 7 _ _ _ _ _ _
3 _ _ _ _ _ 6 7 8 9 8 7 6 _ _ _ _ _
4 _ _ _ _ 5 6 7 8 9 8 7 6 5 _ _ _ _
5 _ _ _ 4 5 6 7 8 9 8 7 6 5 4 _ _ _
6 _ _ 3 4 5 6 7 8 9 8 7 6 5 4 3 _ _
7 _ 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 _
8 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
Теперь время наблюдения.
Из этого наблюдения мы можем прийти к следующим идеям.
Идея: Пирамида – это конструкция из двух треугольников.
Вывод: Легче написать половину этой пирамиды. Итак, давайте перефразируем кислую проблему.
Q2: Как написать порядковый номер, который выглядит как треугольник?
Это действительно просто, нам просто нужно два цикла, первый цикл будет отвечать за столбцы, а другой — за строки.
for (int column = 1; column <= 9; column++) {
for (int row = 1; row <= 9; row++) {
// Observe what will happen if
// we use == or <= or > or <>
if (column ## row) {
System.out.print(row);
} else {
System.out.print(" ");
}
}
System.out.println(' ');
}
Когда вы выполните свое первое задание, вы сможете печатать квадраты, треугольники, строки чисел на экране.
Итак, когда мы знаем, как напечатать треугольник следующим образом:
r
c 1 2 3 4 5 6 7 8 9
1 _ _ _ _ _ _ _ _ 9
2 _ _ _ _ _ _ _ 8 9
3 _ _ _ _ _ _ 7 8 9
4 _ _ _ _ _ 6 7 8 9
5 _ _ _ _ 5 6 7 8 9
6 _ _ _ 4 5 6 7 8 9
7 _ _ 3 4 5 6 7 8 9
8 _ 2 3 4 5 6 7 8 9
9 1 2 3 4 5 6 7 8 9
Мы должны изменить ваш код, чтобы он был более подходящим, обычно операции в компьютерных мирах начинаются с нуля, а не с единицы.
r
c 0 1 2 3 4 5 6 7 8
0 _ _ _ _ _ _ _ _ 9
1 _ _ _ _ _ _ _ 8 9
2 _ _ _ _ _ _ 7 8 9
3 _ _ _ _ _ 6 7 8 9
4 _ _ _ _ 5 6 7 8 9
5 _ _ _ 4 5 6 7 8 9
6 _ _ 3 4 5 6 7 8 9
7 _ 2 3 4 5 6 7 8 9
8 1 2 3 4 5 6 7 8 9
Когда вы преуспеете в этом, мы остановимся на мгновение и подумаем.
Почему мы должны повторять все эти операции для каждой строки? Если бы мы могли где-то размещать значения, нам не нужно было бы больше думать и вычислять их, а только сосредоточиться на записи всего результата на экран.
Решением этой проблемы являются массивы и концепция подхода, известного как динамическое программирование. В этом подходе мы пытаемся запомнить где-то вещи, которые будут использоваться для будущих операций.
Таким образом, червяк позволяет просто присвоить число и массив вместо их печати.
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [9]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [8] [9]
[ ] [ ] [ ] [ ] [ ] [ ] [7] [8] [9]
[ ] [ ] [ ] [ ] [ ] [6] [7] [8] [9]
[ ] [ ] [ ] [ ] [5] [6] [7] [8] [9]
[ ] [ ] [ ] [4] [5] [6] [7] [8] [9]
[ ] [ ] [3] [4] [5] [6] [7] [8] [9]
[ ] [2] [3] [4] [5] [6] [7] [8] [9]
[1] [2] [3] [4] [5] [6] [7] [8] [9]
В и вы должны были придумать такой код
int[] array = new int[9];
for (int column = array.length; column > 0; column--) {
for (int row = 0; row <= array.length; row++) {
if (column == row) {
array[row - 1] = column;
}
}
System.out.println(Arrays.toString(array));
}
Итак, что ясно из этого кода, так это то, что мы для каждого шага используем set только одно значение. Это представлено ниже
9 [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [9] - Step one we put nine
8 [ ] [ ] [ ] [ ] [ ] [ ] [ ] [8] [ ] - Step two we put eight
7 [ ] [ ] [ ] [ ] [ ] [ ] [7] [ ] [ ]
6 [ ] [ ] [ ] [ ] [ ] [6] [ ] [ ] [ ]
5 [ ] [ ] [ ] [ ] [5] [ ] [ ] [ ] [ ]
4 [ ] [ ] [ ] [4] [ ] [ ] [ ] [ ] [ ]
3 [ ] [ ] [3] [ ] [ ] [ ] [ ] [ ] [ ]
2 [ ] [2] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
1 [1] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
После девяти шагов мы заполним весь массив числами.
Чего нам все еще не хватает, так это результата на экране. Для этого мы должны печатать весь наш массив на каждом шаге. Сначала мы должны напечатать его слева направо, а затем передний конец в начало.
И код, который делает волшебство, должен выглядеть так
public static void pyramide(int levels) {
int[] tab = new int[levels];
for (int row = tab.length; row > 0; row--) {
tab[row - 1] = row;
//Print left
for (int i = 0; i < tab.length; i++) {
if (tab[i] != 0) {
System.out.print(tab[i]);
} else {
System.out.print(' ');
}
}
//Print right
for (int i = tab.length - 2; i >= row - 1; i--) {
if (tab[i] != 0) {
System.out.print(tab[i]);
}
}
System.out.println("");
}
}
person
Damian Leszczyński - Vash
schedule
04.09.2012