6588浏览
查看: 6588|回复: 2

【一天一条C语言算法3】巴斯卡三角形

[复制链接]
本帖最后由 iooops 于 2016-4-1 21:30 编辑

【说明】
想办法生成下面这个图形:

【一天一条C语言算法3】巴斯卡三角形图2


细心的胖友一定已经发现了一个规律,那就是!下面的数字是上面两个数字之和!









然而其实这一点对于解题而言好像并没有什么卵用 - -










好吧其实楼主绞尽了脑汁都没能想出解决的办法 - -

好在有大神知道该怎么办- -


【解法】



没错就是它!
细心的胖友一定又发现了上面的三角形和阶乘公式的关系吧!
【一天一条C语言算法3】巴斯卡三角形图1


阶乘公式又可以写成下面这样:
【一天一条C语言算法3】巴斯卡三角形图3

那么既然如此,那我们就能基于这个公式来一行行输出我们想要的数字了!
一行行的数字的实现,那么是使用循环,从上而下打。
我们知道,每一行的第一个数字一定是1,然后当行的行数一定是n,然后根据公式,我们来把n和r分别代入,依次求解后面的数字,那么这就可以用循环的方式来实现啦。

那用嵌套的循环就能实现这个巴斯卡三角形啦~~


C语言实现代码如下:
  1. #include <stdio.h>
  2. #define HEIGHT 12
  3. int combi(int n, int m){
  4.     int p = 1;
  5.     int i;
  6.     for(i = 1; i <= m; i++) {
  7.         p = p * (n - i + 1) / i;
  8.     }
  9.     return p;
  10. }
  11. int main() {
  12.     int n;
  13.     for(n = 0; n < HEIGHT; n++) {
  14.         char format[5];            
  15.         sprintf(format, "%%%ds", (HEIGHT - n) * 3);
  16.         printf(format, "");
  17.         int m;
  18.         for(m = 0; m <= n; m++) {
  19.             printf("%6d", combi(n, m));
  20.         }
  21.         printf("\n");
  22.     }
  23.     return 0;
  24. }
复制代码

运行结果如下:
【一天一条C语言算法3】巴斯卡三角形图4




有没有觉得很神奇呢!
楼主为了搞懂这个实现方式死了不少的脑细胞呢!






另:鉴于连载算法耗的楼主的脑细胞实在有点多,楼主打算每两到三天更新一篇。
推荐一个在线编译器:http://codepad.org
楼主使用下来唯一觉得有点遗憾的就是一碰到需要输入的部分就无法正常工作了。


参考:
https://jishus.org/?p=598
http://openhome.cc/Gossip/AlgorithmGossip/PascalTriangle.htm


dsweiliang  初级技神

发表于 2016-4-1 17:46:49

看到数学就头痛
回复

使用道具 举报

iooops  中级技匠
 楼主|

发表于 2016-4-1 21:32:51


啊3D打印的工具绝对绝对是应用数学的集大成之作啊!虽然小白并不能了解它是怎么实现的 - -
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail