Я хочу нарисовать такой узор:
567898765
4567654
34543
232
1
Но я не могу понять это, потому что это вывод, который я сейчас получаю:
567898765
45678987654
3456789876543
234567898765432
12345678987654321
Это мой код:
#include <stdio.h>
int main() {
int a, b, c, s;
for (a = 5; a >= 1; a--) {
for (s = a; s <= 4; s++) {
printf(" ");
}
for (b = a; b <= 9; b++) {
printf("%d", b);
}
for (c = 8; c >= a; c--) {
printf("%d", c);
}
printf("\n");
}
return 0;
}
Вы должны разбить эту проблему на части: сначала придумайте способ напечатать 567898765
с учетом 5
, затем зациклите это, чтобы получить треугольник, выровненный по левому краю; затем выясните, сколько пробелов нужно печатать в начале каждой строки, чтобы выровнять ее по центру.
Пожалуйста, не размещайте изображения текста, размещайте текст как правильно отформатированный текст.
В основном вы поняли правильно, только постоянные значения 9
и 8
в циклах b
и c
неуместны, поскольку центральная ось треугольника не всегда равна 9
; значения равны 2*a-1
и 2*a-2
соответственно.
Всегда старайтесь писать более общий код, не используя магические числа, такие как 5
и 9
. Может случиться так, что неверный код даст ожидаемый результат для одних магических чисел, а для других не сработает.
Также объявляйте переменные в минимальных областях, где они используются.
Основной причиной некорректного вывода вашей программы является использование магических чисел 9
и 8
в этих циклах for.
for (b = a; b <= 9; b++) {
printf("%d", b);
}
for (c = 8; c >= a; c--) {
printf("%d", c);
}
Могу предложить следующее решение.
#include <stdio.h>
int main( void )
{
const unsigned int MAX_HEIGHT = 50;
while (1)
{
unsigned int n;
printf( "Enter the height of a triangle not greater than %u (0 - exit): " , MAX_HEIGHT );
if (scanf( "%u", &n ) != 1 || n == 0) break;
int width = 1 + snprintf( NULL, 0, "%d", 2 * n - 1 );
putchar( '\n' );
for (unsigned int i = n; i != 0; --i)
{
printf( "%*u", ( n - i + 1 ) * width, i );
size_t j = 1;
for (; j < i; j++)
{
printf( "%*u", width, i + j );
}
--j;
while (j-- != 0)
{
printf( "%*u", width, i + j );
}
putchar( '\n' );
}
putchar( '\n' );
}
}
Вывод программы может выглядеть так
Enter the height of a triangle not greater than 50 (0 - exit): 10
10 11 12 13 14 15 16 17 18 19 18 17 16 15 14 13 12 11 10
9 10 11 12 13 14 15 16 17 16 15 14 13 12 11 10 9
8 9 10 11 12 13 14 15 14 13 12 11 10 9 8
7 8 9 10 11 12 13 12 11 10 9 8 7
6 7 8 9 10 11 10 9 8 7 6
5 6 7 8 9 8 7 6 5
4 5 6 7 6 5 4
3 4 5 4 3
2 3 2
1
Enter the height of a triangle not greater than 50 (0 - exit): 5
5 6 7 8 9 8 7 6 5
4 5 6 7 6 5 4
3 4 5 4 3
2 3 2
1
Enter the height of a triangle not greater than 50 (0 - exit): 1
1
Enter the height of a triangle not greater than 50 (0 - exit): 0
Посмотрите здесь