1.二维数组法
比较简单
思路:
每行的中间元素等于其 上一行的元素 加上 上一行减一的元素
#include <stdio.h> #include <stdlib.h> #define ROW 100 //行 #define COS 100 //列 //二维数组 void YHTrile_Twodim(int n, int(*arr)[COS]) { //特殊处理 for (int i = 0; i < n; i++) { arr[i][0] = 1; arr[i][i] = 1; } for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { if (i>1 && j != 0 && j != i) { arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1]; } printf("%-5d ",arr[i][j]); } printf("\n"); } } int main() { int arr[ROW][COS] = { 0 }; int n = 0; printf("\n"); YHTrile_Twodim(10, arr); system("pause"); return 0; }
2. 一维数组法
比较难思考一点
请看图解:
思路如下:
(1). 对前两个元素初始化为1,前两个数足以打印打印第一行和第二行
(2). 到了第三行 利用这两个数 再在其后 赋予1这个元素
此时数组为 1 1 1 三个元素
再让其 倒数第二个数 等于 其本身 加上 前面一个元素
此时数组为 1 2 1 打印出第三行
(3). 到了第四行 数组为 1 2 1 1 四个元素
再让其 倒数第二个数 等于 其本身 加上 前面一个元素
再让其 倒数第三个数 等于 其本身 加上 前面一个元素
此时数组为 1 3 3 1
。
。
。
每到下一行都会改变数组的元素,然后再增加1这个元素,利用同一组数不断改变,来实现的!!
根据思路,加上循环就可实现
#include <stdio.h> #include <stdlib.h> #define ROW 100 #define COS 100 void YHTrile_Onedim(int n, int *arr) { arr[0] = 1; //第一行 printf("%-5d\n", arr[0]); arr[1] = 1; //第二行 printf("%-5d%-5d\n", arr[0], arr[1]); for (int i = 2; i < n; i++) //后n-2行 { arr[i] = 1; //每行最后一个元素置1 for (int j = i - 1; j>0; j--) { arr[j] = arr[j - 1] + arr[j]; } for (int k = 0; k <= i; k++) { printf("%-5d", arr[k]); } printf("\n"); } } int main() { int arr[ROW*COS] = { 0 }; printf("\n"); YHTrile_Onedim(10, arr); system("pause"); return 0; }