方法一:迭代生成法
```c
include
int fac(int number) {
if (number == 1) return 1;
else if (number == 0) return 1;
else return fac(number-1)*number;
}
int main() {
int number;
printf("Enter the number of rows: ");
scanf("%d", &number);
for (int i = 1; i <= number; i++) {
for (int j = 0; j < number - i; j++) {
printf(" ");
}
for (int k = 0; k <= i; k++) {
int temp = fac(i - 1) / (fac(k) * fac(i - k - 1));
printf("%4d", temp);
}
printf("\n");
}
return 0;
}
```
方法二:动态规划法
```c
include
include
int generate(int numRows, intreturnSize, int returnColumnSizes) {
inttriangle = (int)malloc(numRows * sizeof(int*));
*returnSize = numRows;
*returnColumnSizes = (int*)malloc(numRows * sizeof(int));
for (int i = 0; i < numRows; i++) {
triangle[i] = (int*)malloc((i + 1) * sizeof(int));
triangle[i] = triangle[i][i] = 1;
for (int j = 1; j < i; j++) {
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
}
(*returnColumnSizes)[i] = i + 1;
}
return triangle;
}
int main() {
int numRows;
printf("Enter the number of rows: ");
scanf("%d", &numRows);
inttriangle = generate(numRows, &numRows, &numRows);
for (int i = 0; i < numRows; i++) {
for (int j = 0; j <= i; j++) {
printf("%4d", triangle[i][j]);
}
printf("\n");
free(triangle[i]);
}
free(triangle);
free(numRows);
return 0;
}
```
方法三:直接计算法
```c
include
int main() {
int rows, coef = 1;
printf("Enter the number of rows: ");
scanf("%d", &rows);
for (int i = 0; i < rows; i++) {
for (int space = 1; space <= rows - i; space++) {
printf(" ");
}
for (int j = 0; j <= i; j++) {
if (j == 0 || i == 0) coef = 1;
else coef = coef * (i - j + 1) / j;
printf("%4d", coef);
}
printf("\n");
}
return 0;
}
```
方法四:预处理数组法