如何在C中将Pascal三角形上下翻转,以便第一行最后打印,最后一行首先打印?

时间:2018-10-31 17:09:59

标签: c

我创建了一个程序,该程序将询问用户有关Pascal三角形的输入,然后根据他们的输入将其输出,并且它可以工作,但是,现在我需要将其倒置,以便最后一行是首先打印,然后第一行打印。我想到了两种方法,但并不完全确定如何执行它们。一种方法是更改​​循环,因为我有3个For循环,并且每次都添加1个循环,因此与其加1而不是减1,但是我认为这不会可以正常工作,这意味着循环中的起始值必须大于行数,并且当变量中的值等于或大于行时,循环终止。我想到的另一种方法是重新定位printf函数,但并不完全确定该怎么做。

我的代码:

for (i=0; i < rows; i++)

1 个答案:

答案 0 :(得分:0)

以下code可以在三种情况下工作。

测试:./a.out 5

case 1: 

                   1    
               1       1    
           1       2       1    
       1       3       3       1    
   1       4       6       4       1    


 case 2: 

   1       4       6       4       1    
       1       3       3       1    
           1       2       1    
               1       1    
                   1    


 case 3: 

                   1    
               1       1    
           1       2       1    
       1       3       3       1    
   1       4       6       4       1    
       1       3       3       1    
           1       2       1    
               1       1    
                   1    

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
    if (argc != 2)
        return -1;

    char* ptr;
    int rows = strtol(argv[1], &ptr, 10);
    if (rows < 1 || rows > 10 || *ptr != '\0')
    {
        printf("Error\n");
        return 1;
    }

    int f[20][20];

    for (int i = 0; i < rows; ++i)
        f[i][i] = f[i][0] = 1;
    for (int i = 2; i != rows; ++i)
        for (int j = 1; j != i; ++j)
            f[i][j] = f[i-1][j] + f[i-1][j-1];

    printf("\n\n case 1: \n\n");
    for (int i = 0; i < rows; ++i)
    {
        for (int j = 0; j < rows - i - 1; ++j)
            printf("%4c", ' ');
        for (int j = 0; j <= i; ++j)
            printf("%4d%4c", f[i][j], ' ');
        printf("\n");
    }

    printf("\n\n case 2: \n\n");
    for (int i = rows - 1; i >= 0; --i)
    {
        for (int j = 0; j < rows - i - 1; ++j)
            printf("%4c", ' ');
        for (int j = 0; j <= i; ++j)
            printf("%4d%4c", f[i][j], ' ');
        printf("\n");
    }

    printf("\n\n case 3: \n\n");
    for (int i = 0; i < rows; ++i)
    {
        for (int j = 0; j < rows - i - 1; ++j)
            printf("%4c", ' ');
        for (int j = 0; j <= i; ++j)
            printf("%4d%4c", f[i][j], ' ');
        printf("\n");
    }

    for (int i = rows - 2; i >= 0; --i)
    {
        for (int j = 0; j < rows - i - 1; ++j)
            printf("%4c", ' ');
        for (int j = 0; j <= i; ++j)
            printf("%4d%4c", f[i][j], ' ');
        printf("\n");
    }



    return 0;
}