У меня есть некоторый интервал ошибки в моем паскаль треугольнике с использованием программирования C - PullRequest
2 голосов
/ 29 мая 2019

Интервал в моем коде отключен, может кто-нибудь помочь.Я попытался (показано ниже)

#include <stdio.h>

int factorial(int n){
    int fact = 1;

    if(n == 0){
        return 1;
    } else {
        for(int i = 1; i <= n; i++){
            fact = fact * i;
        }
        return fact;
    }
}

int choose(int n, int r)
{
    int ans;

    ans = (factorial(n))/((factorial(r))*(factorial(n-r)));
    return ans;
}

void triangle(int numOfRows){
    for(int n=0; n<numOfRows; n++)
    {
        for(int i=1; i<=numOfRows-n; i++){
            printf("   ");    // Note the extra space
        }
        for(int r=0; r<=n; r++)
        {
           printf("%5d ",choose(n,r)); // Changed to %3d
        }    
        printf("\n");
    }
}

int main(){
    int rows;
    printf("Enter the number of rows: ");
    scanf("%d", &rows);

    while(rows > 0 && rows <=13){

        triangle(rows);

        printf("Enter the number of rows: ");
        scanf("%d", &rows);
    }
    return 0;
}

Ожидаемый результат должен быть:
enter image description here
Спасибо, я был бы признателен (это также мой первыйвремя использования этого сайта, так что извините за плохой формат материала).

Программа должна работать до 13 строк (что показано в моем цикле while в моих основных функциях).

1 Ответ

0 голосов
/ 25 июня 2019

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

Во-первых, вы добавляете 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 

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...