ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:15.66KB ,
资源ID:603931      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-603931.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(杨辉三角算法集锦.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

杨辉三角算法集锦.docx

1、杨辉三角算法集锦杨辉三角算法集锦 /* Name: 杨辉三角算法集锦 分别使用了二维数组,一维数组,队列,二项式公式,组合公式推论和递归方法等9种算法 */ #include #include using namespace std; const int MAXROW = 40; void PrintBlank(int n); int Com(int n, int m); int Try(int row, int cel); void Fun_1(int row); void Fun_2(int row); void Fun_3(int row); void Fun_4(int row); v

2、oid Fun_5(int row); void Fun_6(int row); void Fun_7(int row); void Fun_8(int row); void Fun_9(int row); int main() int row; cin row; Fun_1(row); cout Fun_2(row); cout Fun_3(row); cout Fun_4(row); cout Fun_5(row); cout Fun_6(row); cout Fun_7(row); cout Fun_8(row); cout Fun_9(row); system( return 0; /

3、输出n个空格 void PrintBlank(int n) for (int i=0; i cout /使用二维数组输出杨辉三角 void Fun_1(int row) const int DIS = 6; int blank = 32; int aMAXROWMAXROW = 0; for (int i=0; i PrintBlank(blank-=DIS/2);/输出第i行空格 for (int j=0; j if (j = 0 | j = i) aij = 1; else /规律: 左上与正上元素之和 aij = ai-1j-1 + ai-1j; cout if (j = i) cout

4、 /使用队列输出杨辉三角 void Fun_2(int row) const int DIS = 6; int max = row + 2; int blank = 30; int *a = new intmax; int front, rear; front = 0; a0 = 1; rear = 1; a1 = 1; PrintBlank(blank);/输出第一行空格 while (front != (rear+1)%max) if (afront = 1 & a(front+1)%max = 1)/到i-1行尾部 rear = (rear+1)%max; arear = 1; /第i行

5、尾部 rear = (rear+1)%max; arear = 1; /队尾进入第i+1行 cout front = (front+1)%max; /对头进入第i行 PrintBlank(blank-=DIS/2);/输出第i行空格 /处理中间数据 rear = (rear+1)%max; arear = afront + a(front+1)%max; if (front != rear)/队列非空时输出 cout front = (front+1)%max; /删除对头元素 delete a; /使用两个一维数组代替二维数组输出杨辉三角 void Fun_3(int row) const

6、int DIS = 6; int blank = 33; int *a = new introw; /存储下一行 int *b = new introw;/存储输出行 b0 = 1; for (int n=1; n /输出第n行 PrintBlank(blank-=DIS/2); cout cout if (n = row)/已经到最后一行则不再复制 continue; /生成第n+1行数据 a0 = b0; for (int i=1; i ai = bi + bi-1; an = 1; /复制第n+1行数据 for (int i=0; i bi = ai; delete a; delete

7、b; /使用一个一维数组和两个临时变量代替二维数组输出杨辉三角:很巧妙 void Fun_4(int row) const int DIS = 6; int blank = 30; int *a = new introw; /存储输出行 int left, right; /输出第一行 PrintBlank(blank);/输出第1行空格 cout a0 = 1;/左侧数据永远为1 for (int n=1; n left = a0; /生成第n行数据 for (int i=1; i right = ai; ai = left + right;/left=ai-1,right=ai left =

8、 right; an = 1;/设置右侧的数据1 /输出第n行 PrintBlank(blank-=DIS/2); cout cout delete a; /使用一个一维数组和两个临时变量代替二维数组输出杨辉三角:方法同Fun_4,但更具有技巧,有点难懂 void Fun_5(int row) const int DIS = 6; int blank = 33; int *a = new introw; /存储输出行 for (int i=1; i a0 = 1; int left, right; for (int n=1; n left = 0; /生成第n行数据 for (int i=0;

9、 i right = ai; ai = left + right;/left=ai-1,right=ai left = right; /输出第n行 PrintBlank(blank-=DIS/2); for (int i=0; i cout cout delete a; /使用一个一维数组输出杨辉三角;两侧的1不变,计算中间的元素 void Fun_6(int row) const int DIS = 6; int blank = 30; int *a = new introw; /输出第一行 PrintBlank(blank);/输出第1行空格 cout a0 = 1;/最左侧为1,永远不变

10、 for (int n=1; n an = 1; /设置最右侧的1 for (int i=n-1; i0; i-)/设置中间的元素,由于ai的值变化,故应从右到左计算 ai += ai-1; /杨辉三角的规律 /输出第n+1行 PrintBlank(blank-=DIS/2); for (int i=0; i cout cout delete a; /使用二项式定理输出杨辉三角 void Fun_7(int row) const int DIS = 6; int blank = 30; /输出第一行 PrintBlank(blank);/输出第1行空格 cout for (int i=1; i

11、 PrintBlank(blank-=DIS/2);/输出第i行空格 for (int j=0; j cout cout /输出组合c(n,m) int Com(int n, int m) int s1 = 1; int s2 = 1; m = (m n/2) ? (n - m) : m;/取小的,以减少计算量 for (int i=1; i s1 *= n; s2 *= i; if (s1 % s2 = 0)/防止溢出 s1 /= s2; s2 = 1; n-; return s1; /使用组合公式推论输出杨辉三角 :C(n,m) = (n-m+1)/m * C(n,m-1) void Fu

12、n_8(int row) const int DIS = 6; int blank = 30; /输出第一行 PrintBlank(blank);/输出第1行空格 cout for (int n=1; n int c = 1; PrintBlank(blank-=DIS/2);/输出第i行空格 cout for (int m=1; m c = c * (n - m + 1) / m; cout cout /使用递归方法输出杨辉三角 :C(n,k) = 1 (k=0或者n=k);C(n,k) = C(n-1,k-1) + C(n-1,k) void Fun_9(int row) const int DIS = 6; int blank = 33; for (int n=0; n PrintBlank(blank-=DIS/2);/输出第i行空格 for (int m=0; m cout cout /递归函数,输出杨辉三角 :C(n,k) = 1 (k=0或者n=k);C(n,k) = C(n-1,k-1) + C(n-1,k) int Try(int n, int k) if (k = 0 | k = n)/在左右两侧返回1 return 1; return Try(n-1,k-1) + Try(n-1,k);/递推公式

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2