Вам необходимо внести пару изменений, чтобы треугольник был выровнен влево, как и в ожидаемом результате.
Во-первых, вы добавляете 3 дополнительных пробела в первом цикле с помощью printf(" ")
, который фиксируется с помощью <
вместо <=
в условии цикла.
Во-вторых, там4 дополнительных символа добавляются из-за "%5d "
во втором вызове printf
, вам нужно избегать этого для первой итерации (когда r == 0
), используя просто "%d "
.
Вот как *Функция 1014 * будет выглядеть после изменений:
void triangle(int numOfRows) {
for(int n = 0; n < numOfRows; n++) {
for(int i = 1; i < numOfRows-n; i++) {
printf(" ");
}
for(int r = 0; r <= n; r++) {
printf(r == 0 ? "%d " : "%5d ", choose(n, r));
}
printf("\n");
}
}
И некоторые примеры вывода (работает до 13 без проблем, по крайней мере, на моем 64-битном Linux с gcc и clang):
Enter the number of rows: 3
1
1 1
1 2 1
Enter the number of rows: 4
1
1 1
1 2 1
1 3 3 1
Enter the number of rows: 5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Enter the number of rows: 13
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 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1