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