杨辉三角
众所周知,杨辉三角是数学中神奇的存在,他是二项式系数的集合,具有很多规律,其中还包含斐波那契数列,每一行的和又是程序员喜欢的 2^n 。
<img src = https://img-blog.csdnimg.cn/94c9b133707643a99d6a7420c486a7d3.jpeg#pic_center width = "30%">
那么怎么用c语言打印出来呢?话不多说,让我们开始吧!
本文给出了两种生成杨辉三角的方法,遍历二维数组也是用常规方法和指针的两种方法。
主函数
#include <stdio.h>
#define len 18 //产生杨辉三角最大行数
int main()
{
int n; //输入打印的杨辉三角行数
printf("请输入打印杨辉三角的行数(%d行以内):",len);
scanf("%d",&n);
if(n > len || n <= 0){ //判断超出生成数组的行数外报错
printf("error!\n");
}
else{
printTri_1(n); //两种方法实现的函数
printTri_2(n);
}
return 0;
}
方法一
void printTri_1(int n)
{
int a[len][len] = {0}; //定义一个二维数组来存放杨辉三角的值,初始化全部为0
int i,j;
//使数组中的第一列和对角线上都为1,即杨辉三角的边上都为1
for(i = 0; i < len; i++){
a[i][0] = 1;
a[i][i] = 1;
}
/*填充杨辉三角内部数据
*杨辉三角除了边上的值为1,其他值满足其肩上两数之和
*映射在数组中,一个数为行号减一,另一个数为行和列都减一*/
for(i = 1; i < len; i++){ //从第二行开始循环,到设置的最大行值
for(j = 1; j < i; j++){ //从第二列开始,只需要到数组的对角线前一个
a[i][j] = a[i-1][j] + a[i-1][j-1];
}
}
//使用for循环遍历数组,打印杨辉三角
for(i = 0; i < n; i++){
printf("%*s",3*n-3*i,""); //打印每一行前渐变的空格数
for(j = 0; j <= i; j++){
printf("%6d",a[i][j]);
}
puts("");
}
}
方法二
void printTri_2(int n)
{
int a[len][len]; //定义一个二维数组来存放杨辉三角的值
int i,j;
int (*p)[len]; //定义一个行指针并指向杨辉三角的数组
p = a;
//下面嵌套循环为建立杨辉三角的过程,使用指针遍历整个数组
for(i = 0; i < len; i++){ //从第一行开始循环,到设置的最大行值
for(j = 0; j <= i; j++){ //从第一列开始,要到数组的对角线上
if(j == 0 || j == i){ //判断第一列和在对角线上的赋值为1
*(*(p+i)+j) = 1;
}
else{ //剩下的值满足以下规律
*(*(p+i)+j) = *(*(p+i-1)+j) + *(*(p+i-1)+j-1);
}
}
}
//使用for循环遍历整个数组并打印,使用指针访问
for(i = 0; i < n; i++){
printf("%*s",3*n-3*i,""); //打印每一行前渐变的空格数
for(j = 0; j <= i; j++){
printf("%6d",*(*(p+i)+j));
}
puts("");
}
}
输出结果演示
请输入打印杨辉三角的行数(18行以内):13
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1