二项式定理与杨辉三角联系十分紧密。杨辉三角的第 n 行的第 m(设m从0开始数) 个数即 n 次二项式展开的第 m 个系数,因此杨辉三角某行某列上的数都可以通过二项式定理的系数来得知,计算n次二项式展开的系数又可以通过排列组合的公式来求。

杨辉三角的第 n 行 第  m 列可以使用该公式求得,这里的 n 行、m 列对应着上方公式中的 n 和  m 。等式最右边的分子为 n 的阶乘,一定包含分母中的 (n - m)! ,两者相消,得到的结果分子为 n * (n - 1) * (n - 2) * (n - 3) * ...... * (n - m + 1),分母为 m!。

同时还有,0!= 0,所以杨辉三角的第零行,就是什么都没有。。。

#include<stdio.h>// 计算分母 返回一个数的阶乘
double findFactorial(double num){double result = 1;for( ; num > 1 ; num--){result *= num;}return result;
}// 计算分子 start * ( start - 1 ) * ( start - 2 )~~~~(start - end + 1)
double calculate(double start, double num){double result = 1;                  // 保存结果double tempstart = start;for(; start > tempstart - num ; start--){result *= start;}return result;
}// 打印出杨辉三角     默认从第一层开始 ‘1’、‘1 1’、‘1 2 1’....
void printYangHui(double n){if(n == 0){                   // 如果要第零层则打印空return;}for(double i = 0 ; i < n ; i++){for(double j = 0 ; j <= i ; j++){printf("%0.lf  ",calculate(i, j) / findFactorial(j));}printf("\n");}
}int main(){printf("请输入杨辉三角的层数:");int n = 0;scanf("%d",&n);printf("result:\n\n");printYangHui(n);}

对比利用数组来输出杨辉三角,这种方法不需要开辟数组,节省了一定的空间,但是计算较多,也存在重复计算的问题:杨辉三角是两侧对称的,即两侧的数据有重复的,这里的计算重复了。

利用递归改进一下,对称输出,就不用重复计算之前已经计算过的值了:


// 利用递归进行对称打印  新增的
void printSymmetry(int i, int j){double temp = calculate(i, j) / findFactorial(j);printf("%0.lf  ", temp);                // 三角的左边输出if(j < i / 2){printSymmetry(i, j + 1);}if(2 * j != i){                        // 判断情况,三角的右边输出printf("%0.lf  ",temp);       }
}// 打印出杨辉三角     默认从第一层开始 ‘1’、‘1 1’、‘1 2 1’....
void printYangHui(double n){if(n == 0){                   // 如果要第零层则打印空return;}for(double i = 0 ; i < n ; i++){     // C00 = 1 即第一行为1printSymmetry(i, 0);                // 在这里调用上面的递归函数printf("\n");}
}

不过这里面,还是有很多重复的计算,比如阶乘的计算就重复计算了很多次。

利用排列组合公式Cnm输出杨辉三角(C语言实现)相关推荐

  1. 利用非数组的方法输出杨辉三角

    大家知道利用数组数组的方法输出杨辉三角是一件比较容易的事情,在许多的教材上都能够找到,而且计算速度比较快,但是有个缺点就是当输出的阶数比较大的时候,需要占用较多的存储空间. 下面我尝试用利用非数组的方 ...

  2. 利用队列输出杨辉三角 C语言

    #include<stdio.h> #include<stdlib.h>#define MAXQSIZE 200typedef int QElemType;typedef st ...

  3. C语言课程设计报告输出杨辉三角,C语言学习:在屏幕上输出杨辉三角

    杨辉三角的规律是:它的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和. 代码如下: #include #include int main() { int i,j,k,arr[10][ ...

  4. c语言指针法实现杨辉三角,C++_C语言在屏幕上输出杨辉三角,这就是杨辉三角,也叫贾宪三 - phpStudy...

    C语言在屏幕上输出杨辉三角 这就是杨辉三角,也叫贾宪三角.这于我们现在的学习联系最紧密的是2项式乘方展开式的系数规律.如图,在贾宪三角中,第3行的第三个数恰好对应着两数和的平方公式依次下去. 杨辉三角 ...

  5. JAVA中for循环写杨辉三角_java使用for循环输出杨辉三角

    思路是创建一个整型二维数组,包含10个一维数组.使用双层循环,在外层循环中初始化每一个第二层数组的大小.在内层循环中,先将两侧的数组元素赋值为1,其他数值通过公式计算,然后输出数组元素.public ...

  6. C语言程序设计谭浩强(第四版)部分课后习题作答——第六章-输出杨辉三角,输出魔方阵

    代码: 杨辉三角题目较为简单,魔方阵题目实现了输出任意整数即可输出对应的魔方阵 #include<stdio.h> #include<stdlib.h> #include< ...

  7. python用generator打印杨辉三角_python写generator输出杨辉三角遇到问题,望高手解答!...

    >>>defy_():...L=[1]...whileTrue:...yieldL...L=L.append(0)...L=L.insert(0,0)...L=[L[x]+L[x+1 ...

  8. C#控制台程序输出杨辉三角

    Console.WriteLine("请输入杨辉三角的n值:");int n=int.Parse(Console.ReadLine());int[,] arr1 = new int ...

  9. 数据结构——c语言 递归输出杨辉三角

    戳这里还有其他数据结构的题目噢 数据结构--部分题目和代码实现目录_起当风萧的博客-CSDN博客 设计并验证输出杨辉三角的递归算法. (1)杨辉三角,又称贾宪三角形.帕斯卡三角形,是二项式系数在三角形 ...

最新文章

  1. 码云新建仓库,与本地仓库关联
  2. java static关键字_好程序员Java教程分享static关键字的理解
  3. 杭州网络推广浅析网站优化如何更快的提升收录?
  4. python能做哪些单机游戏好玩_【单机游戏】可以快速用Python进行数据分析的几个小技巧_玩得好游戏攻略...
  5. 计算机组成原lta,计算机组成原理实验三运算器
  6. 中继(洪泛中继、定向中继)在无线通讯中的应用
  7. 负margin在布局中的运用(*****************************************************************)...
  8. 刷新所有视图存储过程
  9. 腾讯IDG投资的明星无人车公司Zoox,拿下硅谷第一张载客许可
  10. 【链表】牛客网:链表内指定区间反转
  11. Matlab取整函数
  12. 谷歌服务安装包_安卓手机安装谷歌服务框架和Google Play傻瓜式教程 100%好用
  13. linux命令之hostid
  14. 计算机应用基础(专)【6】
  15. 谷歌(Chrome)浏览器 视频播放全屏退出时死机
  16. mac电脑软件卸载不掉 如何用CleanMyMac X彻底删除?
  17. 手机评测 三星V-208
  18. pwm一个时间单位_详解PWM原理、频率与占空比
  19. 消防审批时限减了一半
  20. xshell4 设置自动记录日志

热门文章

  1. 次坐标从0开始_什么是齐次坐标?
  2. 深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」
  3. 一个程序员6年的浏览器收藏夹
  4. HTML语法标签大全
  5. [MFC美化] SkinSharp使用详解2-SkinH.h函数介绍
  6. 匆忙推出的Mobileme没有得到广泛的认可,用户认为它速度缓慢、价格昂贵还总是出错
  7. 中国(濮阳)埃塞咖啡加工产业示范园战略共建协议签约仪式在北京举行,标志该项目正式落地濮阳。
  8. 服务启动错误1053,一例解决方案(给用户添加NetworkService权限)
  9. 国密算法介绍-SM3及摘要算法(签名算法)国际SHA-256
  10. 人工智能对广告行业和媒体行业的冲击