目录
前言
今天来讲一下用两种方法写杨辉三角,话不多说,直接进入正题。
一、二维数组(方法一)
第一种方法就是用到二维数组,初始化代码后,通过for循环,用i确定行,用j确定列。
发现杨辉三角的规律,每行第一个和最后一个都是1。
除了第一行,每行的每个数的每个数都等于这个数上一行这个位置的数和上一行这个位置前一个位置的数的和,知道这些规律就可以用代码实现了。
以下是整个代码,带了一些注释
#include<stdio.h>
int main()
{
int arr[20][20] = { 0 }; //初始化数组
int i, j,n;
scanf("%d", &n); //输入要打印几行
for (i = 0; i < n; i++) //i确定行
{
for (j = 0; j <= i; j++) //j确定列
{
if (j==0 || j == i)
arr[i][j] = 1; //每行第一个和最后一个为1
else
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
}
for (i = 0; i < n; i++) //用循环把数组打印出
{
for (j = 0; j <= i; j++)
printf("%-3d ", arr[i][j]); //这里用%-3d是为了打印的更整齐
printf("\n");
}
return 0;
}
二、排列组合(方法二)
第二种方法就用到了数学中的排列组合的思想
那个符号打不出来,这里就直接上代码了,有点难理解,请见凉,代码都带了注释,帮助更好理解。
#include<stdio.h>
int main()
{
int i, j, n;
scanf("%d", &n); //输入要打印几行
for (i = 0; i <=n; i++) //i确定行
{
for (j = 0; j <= i; j++) //j确定列
{
if (j == 0 || i == j) //每行第一个和最后一个为1
printf("1");
else
{
int a = 1, b = i, sum1 = 1, sum2 = 1;
while (a <= j) //排列组合中分母乘几次分子就乘几次
{
sum1 *= a; //分母是j的阶乘
sum2 *= b; //分子是从i一直乘到i-j
a++;
b--;
}
printf("%-3d ", sum2 / sum1); //两者相除得到结果
}
}
printf("\n");
}
return 0;
}
三、代码的呈现
这里以10为例
写在最后
以上就是用C语言写杨辉三角的两种方法,如果有什么不对的地方,欢迎指正,感觉不错的话,还请点个赞,蟹蟹了。