(法一): 知识点:各位看官:欢迎来到(每日小知识)
建议订阅专栏--> 每日小知识
也欢迎关注小编--> 小峰同学
赶快上跟着小编每天进步一点点,开心学习每一天。
如果觉得小编的文章对你有帮助,可以一键三连支持小编
你的支持才是小编最大的动力
本期重点:语言实现杨辉三角的两种主要思路
首先我们来了解一下杨辉三角的基础知识点:
具体实现:
- 杨辉三角的两个腰边的数都是 1。
- 其它位置的数都是上顶上两个数之和。
- 行数等于最后一行的元素个数。
创建一个N阶的二维数组,并且初始化为0
int arr[N][N] = { 0 };
//由于他的行数和最后一行的元素个数相同,所以需要一个方阵。
然后给我们需要的位置赋值。
//每一行元素的初始化
for (int i = 0; i < N; i++)
{
//两边赋值
arr[i][0] = arr[i][i] = 1;//第一列和对角线
//中间赋值
if (i > 1)//从第三行开始才对中间开始赋值
{
for (int k = 1; k < i; k++)
{
arr[i][k] = arr[i - 1][k - 1] + arr[i - 1][k];
//中间位置的数都是上顶上两个数之和。
}
}
}
再接着就是打印杨辉三角
for (int i = 0; i < N; i++)
{
//打印前面的空格
for (int k = 0; k < N - i; k++)//这个N-i要经过推理得出
{
printf(" ");//这个是三个空格
}
//六个空格打印出来是一个方阵,减少一半打印出来就是一个等腰三角形
//打印数据
for (int k = 0; k < i+1; k++)
{
printf("%6d", arr[i][k]);
}//注意这个6 最好是偶数,与上面的三个空格相对应的
//如果是4的话上面的空格就要改为两个
//如果这个数太小也不好,太小如果打印的行数太多就会格式混乱
printf("n");
}
(法二): 知识点:
- 杨辉三角的任意一行都是的二项式系数展开
- C00 和 C0n 是1
- cnm = m! / (n! * (m-n)!)
- 二项式系数展开式为C0n ,C1n, C2n, ----Cnn。
- n对应第n+1行。
直接上代码 思路和上面基本相同
#include#define N 20 int fun(int n, int m) { if (n == 0 || m == 0) return 1; if (n == m) return 1; long long sum1 = 1;//m的阶乘 for (int i = 1; i <= m; i++) { sum1 *= i; } long long sum2 = 1;//n的阶乘 for (int i = 1; i <= n; i++) { sum2 *= i; } //注意这里的阶乘是一个很大的数 建议用long 或者long long //不然行数会受限制 //用int 只能打印14行以内的杨辉三角 long long sum3 = 1;//m-n的阶乘 for (int i = 1; i <= (m-n); i++) { sum3 *= i; } return (int)(sum1 / (sum2 * sum3));//注意输出Cn m } int main() { //直接打印 for (int i = 0; i< N; i++) { //打印空格 for (int k = 0; k < N - i; k++) { printf(" "); } //打印数据 for (int k = 0; k < i + 1; k++) { printf("%6d", fun(k, i)); } printf("n"); } return 0; }



