Algorithm-Gossip(3) 巴斯卡三角形
来源:互联网 发布:网络机顶盒电视直播软件下载 编辑:程序博客网 时间:2024/06/05 22:45
前言
This Series aritcles are all based on the book 《经典算法大全》; 对于该书的所有案例进行一个探究和拓展,并且用python和C++进行实现; 目的是熟悉常用算法过程中的技巧和逻辑拓展。
提出问题
打印出下面的这个图形。巴斯卡三角形,下面的一个数为上面两个数的和。
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 11 11 55 165 330 461 461 329 164 54 10 0 \n 1 12 66 220 495 792 924 792 495 220 66 12 1
分析和解释
这是个非常简单的基础题; 跟打印乘法口诀表的行为类似; 外层循环控制行数,内层循环,控制每一行的表现, 首先我们要缩进N-n+1次。
才开始打印数字,接着换行依次如此, 关于对角和为组合数Nchoosk(n,k); 就是在N个数中选择K个数的组合数。
python 使用了 reduce\匿函数\列表推导式来生成nchoosk()。
代码
python 实现
import functools as ftdef nchooser(n,k): if k==0: return 1 return ft.reduce(lambda x,y:x*y,[(n-i+1)/i for i in [x+1 for x in range(k)]])def paint(): N=12; for n in range(N+1): for r in range(n+1): if(r==0): for i in range(N-n+1): print(" ",end="") else: print(" ",end = "") print(int(nchooser(n,r)),end="") print()paint()
C++ 实现
#include<iostream>#define N 10using namespace std;long nchoosek(int n, int k){ int i; long p=1; for(i=0; i<=k; i++) p *= (n-i+1) / i; return p;}int paint(){ int n,r,t; for( n=0; n<=N; n++) { for( r=0; r<= n; r++ ) { int i; if(r==0) { for(i=0; i<= (N-n); i++) cout <<" "; }else {cout << " ";} cout << nchoosek(n,r); } cout << endl; } return 0;}int main(){ paint();}
”’
拓展和关联
关于更多打印的问题可以关注知乎”怎么打印星形”,或者搜索相关的打印题目练习。
再拓展, 关注我后期文章系列 <计算机图形学>
后记
参考书籍
- 《经典算法大全》
- 维基百科
0 0
- Algorithm-Gossip(3) 巴斯卡三角形
- Algorithm Gossip: 上三角形,下三角形,对称矩阵
- Algorithm Gossip: 三色棋
- Algorithm Gossip: 三色棋
- Algorithm Gossip: 数字拆解
- Algorithm Gossip:三色棋
- Algorithm Gossip:生命游戏
- Algorithm Gossip: 字串核对
- Algorithm Gossip:长PI
- Algorithm Gossip: 完美数
- Algorithm Gossip: 阿姆斯壮数
- Algorithm Gossip: 稀疏矩阵
- Algorithm Gossip: 得分排行
- Algorithm Gossip (END)
- Algorithm Gossip: 超長整數運算(大數運算)
- Algorithm Gossip: 中序式轉後序式(前序式)
- Algorithm Gossip: 费式数列
- Algorithm Gossip: 费式数列
- 强/软/弱/虚引用和强/弱类型
- U盘启动制作教程
- [kuangbin带你飞]专题一 简单搜索-C
- 登录记住用户名密码
- 第三人称蓝图控制
- Algorithm-Gossip(3) 巴斯卡三角形
- 4.13模拟赛
- 【mysql】MySQL性能优化建议整理
- 2017蓝桥杯C/C++A组省赛包子凑数(辗转相除法和完全背包)
- 链表操作:反转链表
- IDEA中Hibernate找不到Persistence窗口
- POJ 1236 Network of Schools(强连通分量)
- R一些语法
- Unix设计哲学之可移植性