Правильное расположение чисел в ПАСКАЛЬНОМ ТРЕУГОЛЬНИКЕ

Я сделал программу для создания треугольника Паскаля и для ввода чисел (строк)> 5, есть проблема с выравниванием, т.е. для ncr> 10. Помогите мне, пожалуйста. Я включил изображения для вывода программы.

Выходное изображение

#include<stdio.h>
int factorial(int number)
{   
    int fact=1;
    for(int i=1; i<=number; ++i )
    {
        fact*=i;
    }
    return fact;
}

int ncr(int n, int r)
{
    int ncr;
    int fact1=factorial(n);
    int fact2=factorial(n-r);
    int fact3=factorial(r);
    ncr = fact1 /(fact2 * fact3);
    return ncr; 
}


int main()
{
    int rows;
    printf("enter the number of rows :\n");
    scanf("%d",&rows);
    for(int n=0; n<rows; n++)
    {
        for(int i=1; i<=rows-n; i++)
        {
            printf(" ");
        }
        for(int r=0; r<=n; r++)
        {
            printf("%d ",ncr(n,r));
        }   
        printf("\n");
    }
    return 0;   
}

person Prakhar Sharma    schedule 25.10.2016    source источник
comment
Поэкспериментируйте с пробелами и модификаторами формата printf (например, шириной поля и выравниванием).   -  person Some programmer dude    schedule 25.10.2016
comment
Подсказка: сохраните значения в матрице, чтобы вы могли предварительно рассчитать количество строк и выровнять распечатку.   -  person LPs    schedule 25.10.2016
comment
Ваша ncr функция может легко переполниться входными значениями ›10.   -  person mch    schedule 25.10.2016
comment
Я полный новичок, поэтому я все еще изучаю c, посмотрю, как создать матрицу в c tho.   -  person Prakhar Sharma    schedule 25.10.2016


Ответы (3)


Вы можете изменить внутренний цикл следующим образом

for(int i=1; i<=rows-n; i++)
{
   printf("  ");    // Note the extra space
}
for(int r=0; r<=n; r++)
{
   printf("%3d ",ncr(n,r)); // Changed to %3d
}  

Это будет работать до 9 рядов. Если вы хотите, чтобы он работал с большим количеством строк, вы можете добавить еще один пробел в первый printf и изменить второй printf на %5d

person Rishikesh Raje    schedule 25.10.2016

printf может принимать точность перед форматтером. Измените printf("%d ",ncr(n,r)); на printf("%3d ",ncr(n,r));, чтобы сделать цифры шириной 3 символа. Также измените printf(" "); на printf(" ");.

person v7d8dpo4    schedule 25.10.2016

Если вы используете

printf ("Width trick: %*d \n", 5, 10);

это добавит еще 5 пробелов перед цифровым значением.

person patel apurv    schedule 27.09.2019