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;
}