打印杨辉三角&二项式展开式各项系数

  • C语言实现
    • 法一:数学排列组合公式法
    • 法二:找规律法,二维数组,通俗易懂
    • 法三:法二优化,一维数组
    • 法四:递归
  • Java实现
  • Python实现

(a + b)2
= a2 + 2ab + b2
展开式各项系数为1 2 1


(a + b)3
= a3 + 3a2b + 3ab2 + b3
展开式各项系数为1 3 3 1


(a + b)4
= a4 + 4a3b + 6a2b2 + 4ab3 + b4
展开式各项系数为1 4 6 4 1


(a + b)5
……
……
(a + b)n =


杨辉三角:

每行两侧永远是 1,中间每个数都是它头顶左右两个数之和


C语言实现

法一:数学排列组合公式法

使用数学排列组合数公式法,是通过阶乘运算来求得每行数据的




特点: 使用了数学公式和子函数
缺点: 多次嵌套 for 循环,时间复杂度较大,阶乘数太大,有行数限制

#include <stdio.h>
long Comb(int m, int n){  //求组合数子函数long mFactorial = 1;long n_mFactorial = 1;if(m == 0)return 1;else if(m == n)return 1;else{for(int i = n - m + 1; i <= n; i++)n_mFactorial *= i;for(int i = 1; i <= m; i++)mFactorial *= i;return (n_mFactorial / mFactorial);}
}
int main(){int N;printf("请输入所要打印的杨辉三角的行数(1~13): ");scanf("%d",&N);for(int i = 0; i < N; i++){for(int j = N - 1 - i; j >= 1; j--)printf("     ");for(int j = 0; j <= i; j++)printf("%  ld       ",Comb(j, i));putchar('\n');}return 0;
}

调试:打印行数限制在13行以内,大于13行结果不正确,原因是阶乘的数太大,超出了整型的数据存储范围

法二:找规律法,二维数组,通俗易懂

上面已经提到了规律:每行两侧永远是 1,中间每个数都是它头顶左右两个数之和。借助这个规律来打印杨辉三角,可以节省很多算力,时间复杂度较低

#include <stdio.h>
int main(){int N;int a[24][24];a[0][1] = 1;for(int i = 0; i < 24; i++)a[i][0] = 0;for(int i = 1; i < 24; i++)a[i][i+1] = 0; printf("请输入打印杨辉三角的行数(1~23):");scanf("%d",&N);for(int i = 1; i <= N; i++){for(int j = N - i; j > 0; j--)printf("    ");for(int j = 1; j <= i; j++){a[i][j] = a[i-1][j-1] + a[i-1][j];printf(" %7d",a[i][j]);}putchar('\n');}return 0;
}


运行:

法三:法二优化,一维数组

从法二中推导出一个简化的算法,放入一维数组中

#include <stdio.h>
int main(){int N, c, d; int a[24]={0,1};   //第二十三行有23个数,加上第一个0,总共24,初始化前两个0和1 //后面所有的数都是由这前两个数计算得来 printf("请输入杨辉三角形的行数(1 ~ 23):");scanf("%d",&N);for(int i = 1; i <= N; i++){for(int j = N - i; j >= 1; j--)printf("    ");d = 0;for(int j = 1; j <= i; j++){c = a[j];a[j] = d + c;d = c;printf(" %7d", a[j]);   }printf("\n");}return 0;
}

以上代码可以修改,增加数组长度可以增加打印杨辉三角的行数

法四:递归

递归调用,函数本身不断调用自己。递归调用思维性技巧性比较强,代码也比较简短,但其空间复杂度较大,因为其不断调用自己本身这个函数,在内存中不断开辟函数入口,占内存较大,由于计算机计算速度较快,我们并不能感受到。这个算法建立在前面两个算法之上

#include <stdio.h>
int fun(int a, int b){      //函数的递归调用,函数自己不断调用自己,产生多个子函数程序入口,并返回值相加//函数的程序入口为一个内存地址 return (b == 1 || b == a) ? 1 : fun( a - 1, b - 1 ) + fun( a - 1, b ); //三目条件运算符的应用
}
int main(){int N; printf("请输入杨辉三角形的行数(1 ~ 23):");scanf("%d", &N);for(int i = 1; i <= N; i++){for(int j = N - i; j > 0; j--)printf("    ");for(int j = 1; j <= i; j++)printf(" %7d", fun(i, j));putchar('\n');   //单个转义字符putchar输出 }return 0;
}

调试:

Java实现

Java语言实现,采用C语言中的法三

import java.util.Scanner;
public class Example {public static void main(String args[]){System.out.print("请输入打印杨辉三角的行数(1~23行):");Scanner input = new Scanner(System.in);int N = input.nextInt();int a[] = new int[24];a[0]=0;a[1]=1;int c, d;for(int i = 1; i <= N; i++){for(int j = N - i; j >= 1; j--)System.out.printf("    ");d = 0;for(int j = 1; j <= i; j++){c = a[j];a[j] = d + c;d = c;System.out.printf(" %7d", a[j]);    }System.out.println();}}
}

Python实现

在python中并没有数据类型存储数据范围的限制,所以可以用数学公式法来打印,行数也会不受到限制

def factorial(a, b):fact = 1for i in range(a, b + 1):fact *= ireturn factdef comb(m, n):if m == 0:return 1elif m == n:return 1else:return factorial(n - m + 1, n)/factorial(1, m)n = int(input("请输入打印杨辉三角的行数:"))
for i in range(0, n):for j in range(n - 1 - i, 0, -1):print("    ", end='')for j in range(0, i + 1):print("%7d " % comb(j, i), end='')print()

运行:


多种语言多种方法打印杨辉三角(二项式展开式各项系数)相关推荐

  1. c语言打印杨辉三角七阶,C语言实现:打印杨辉三角

    杨辉三角的样式如下: 1 1 1 1 2 1 1 3 3 1 --------------------------------------------------------------------- ...

  2. PY の 两种方法打印杨辉三角

    方法一:临数相加等于中间夹值 这个方法是大多数人选择的做法吧,至少从逻辑来看,简单太多 以第三行 L 行为例(首行为0行),L[0] + L[1].L[1] + L[2].L[2] + L[3] 分别 ...

  3. C语言打印杨辉三角的多种方法

    3.在屏幕上打印杨辉三角. 1 1 1 1 2 1 1 3 3 1 解法一: #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> in ...

  4. C语言每日一练——第72天:打印杨辉三角(使用两种方法)

    C语言每日一练 2022年1月5日 文章目录 题目描述 问题分析 1. 使用数组法(打印直角三角) 2. 使用数组法(打印等腰三角) 3. 使用公式法(打印等腰三角) 网上参考 题目描述 打印杨辉三角 ...

  5. 【C语言练习——打印杨辉三角及其变形】

    CSDN话题挑战赛第1期 活动详情地址:活动地址 参赛话题:大学学习月/季度总结 话题描述:对自己大学的月/季度学习的复盘及展望 杨辉三角及其变形 前言 1.杨辉三角之左对齐 1.1 写法1 1.2 ...

  6. 打印杨辉三角的9种方法与解析

    打印杨辉三角 杨辉三角科普: 杨辉三角,是二项式系数在三角形中的一种几何排列.每个数等于它上方两数之和.如图: C语言打印杨辉三角的方法 解法一 #include <stdio.h> in ...

  7. 杨辉三角c语言编程报告,C语言打印杨辉三角示例汇总

    杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一. ...

  8. 用linux编译打印杨辉三角形,C语言打印杨辉三角代码及解析

    杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一. ...

  9. [C语言] [典例详解] 打印杨辉三角(找规律简单实现)

    题目>>> 用C语言打印杨辉三角.杨辉三角参考图如下: 分析>>> 于是不清楚杨辉三角的同学们可以上网查查,可以立刻知道它的相关推理归纳和公式总结.它的简介如下: ...

最新文章

  1. 镜像打包工具clonezilla
  2. import javax.servlet 出错(真的很管用)
  3. python之发送HTML内容的邮件
  4. 鸿蒙系统适配开发,捕获科技拟建立鸿蒙开发组 为区块链钱包客户适配鸿蒙系统做筹备...
  5. Jest 只MOCK模块中的某个功能实现
  6. LA 3989 - Ladies' Choice 稳定婚姻问题
  7. ubuntu默认面板被删除后的恢复办法
  8. 复旦 | DialogVED:用于对话响应生成的预训练隐变量编码-解码模型
  9. maya如何查看资源大纲_干货|Maya入门到精通完全自学教程大纲(建模篇)
  10. AutoCad二次开发
  11. 2寸的照片长宽各是多少_2寸-2寸照片的长宽分别是多少厘米 – 手机爱问
  12. 宏观低速物理 '牛顿篇'
  13. 常见的几种ADSL 路由器的端口映射方法
  14. Java工程师薪资究竟有多高?
  15. npm install 报错 - node篇
  16. Python-Web之前端基础介绍(上)
  17. MATLAB之楚列斯基分解法(九)
  18. 东方博宜OJ 1231考试成绩的分布情况
  19. Spring Boot实现 RabbitMQ教程【1】
  20. youtube-dl 命令

热门文章

  1. 【微服务】DSL查询文档
  2. 金立手机电话录音在哪里找
  3. 黑吃黑?男子破解赌博网站漏洞,每月“薅羊毛”10多万元
  4. 华为可以看游戏时长吗_有效管理孩子游戏时长 只需开启华为P10学生模式
  5. 微信活动链接如何创建?门店拓客引流活动链接制作
  6. 对 GNU/Linux 介绍、ArchLinux社区氛围、DDE移植Arch流程
  7. 边缘计算与云计算协同白皮书2018
  8. 计算机网络空间安全好吗,北京理工大学网络空间安全考研难吗
  9. CP2102和CP2104的区别
  10. 【TWS API 问题3】盈透证券的TWS API使用过程中如何实现一个订单成交之后自动取消其他的订单?