【C语言】-杨辉三角
目录
一、什么是杨辉三角?
二、实现方法
1、直角三角形版
1.1、法一 观察法
1.2、法二 部分棋盘打印法
2、等腰三角形版
一、什么是杨辉三角?
特征:图形两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和。
如图:
二、实现方法
1、直角三角形版
注意当把它的全部元素左对齐,就可以看成近似杨辉三角的样子
如图:
1.1、法一 观察法
观察图片,找i==j行和第一列j==0时直接赋值为1
其他数等于肩上两数之和
//法一 观察初始化
int main()
{int i = 0;int j = 0;int n = 0;scanf("%d", &n);int a[10][10] = { 0 };//存放元素for (i = 0; i < n; i++){for (j = 0; j < n; j++){if (j == 0 || i == j) //第一列和i==j时直接赋值为1{a[i][j] = 1; }if (i >= 2 && j >= 1){a[i][j] = a[i - 1][j - 1] + a[i - 1][j];}}}//打印for (i = 0; i < n; i++){for (j = 0; j <=i; j++){printf("%d ", a[i][j]);}printf("\n");}return 0;
}
1.2、法二 部分棋盘打印法
利用扫雷打印棋盘的方法,数组多创建行列多创建两行两列的方式,防止数组越界(也可以行+1,列+1,因为最后一行的下一行,列最后一行下一行(和正规杨辉三角不同)不会用到,没有越界问题)
//法二 采用扫雷初始化的方法,把数组空间行和列各创建大一行,防止越界
int main()
{int a[10][10] = { 0 };int i = 0;int j = 0;int n = 0;a[0][0] = 1;//输入数字scanf("%d", &n);for (i = 1; i <= n; i++) //实际使用的数组大小是a[n+1][n+1],多用到i=0行j=0列,但不打印出来{for (j = 1; j <= i; j++){a[i][j] = a[i - 1][j - 1] + a[i - 1][j];}}//打印for (i = 1; i <= n; i++){for (j = 1; j <= i; j++){printf("%d ", a[i][j]);}printf("\n");}return 0;
}
成果展示:
2、等腰三角形版
1、利用扫雷打印棋盘的方法,数组多创建两行两列(或者行+1,列+2,因为最后一行的下一行不会用到,而列的要用到)
2、数组空间可以自己改大再去看更大的杨辉三角
3、打印出来的空格处在数组中其实是已经初始化为0,打印时当满足数组元素==0,就打印空格
代码如下:
//法三 正规杨辉三角 (防止越界行多创建一行,列多创建两列)
//保存数据
void set(int a[10+1][2 * 10 + 1], int n) //[][]和a本身空间要一致,不然行列数会发生变化
{int i = 0;int j = 0;a[1][n] = 1;for (i = 1; i <=n ; i++){for (j = 1; j <= 2 * n - 1; j++){if (i == 1 && j == n)continue;elsea[i][j] = a[i - 1][j - 1] + a[i - 1][j + 1];}}}
//初始化
void Init(int a[10+1][2 * 10 + 1], int n)
{int i = 0;int j = 0;for (i = 0; i < n+1; i++){for (j = 0; j < 2 * n + 1; j++){a[i][j] = 0;}}
}
//打印
void print(int a[10+1][2 * 10 + 1], int n)
{int i = 0;int j = 0;for (i = 1; i <= n; i++){for (j = 1; j <= 2 * n - 1; j++) //最右边一列不打印{if (a[i][j] == 0){printf(" "); //3个空格,格式好看}else{printf("%3d", a[i][j]); //占3个字符,格式好看}}printf("\n");}
}
int main()
{int n = 0; //a[i][j] = a[i - 1][j - 1] + a[i - 1][j + 1] - 2 * '0';scanf("%d", &n); //char的数组算,当字符大于'9'后会出问题int a[10+1][2*10+1] = { 0 }; //画图后发现:行=n+1,因为和最后一行的下一行无关Init(a, n); // 列=2*n+1 ,多创建两行列set(a, n);print(a, n);return 0;
}
成果展示:
【C语言】-杨辉三角相关推荐
- C语言杨辉三角(两种方法)
杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是 1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一 ...
- C语言——杨辉三角(最佳算法)
目录 方法一:一维数组,节约内存 方法二:(最佳算法⭐)递归函数法,程序最简,占用内存最少 运行结果: C语言输出杨辉三角形 等腰三角形 前言 杨辉三角形的特点: 第一列和对角线上的元素都为1: 除第 ...
- c语言杨辉三角求排列组合,杨辉三角(Pascal Triangle)的几种C语言实现及其复杂度分析...
说明 本文给出杨辉三角的几种C语言实现,并简要分析典型方法的复杂度. 本文假定读者具备二项式定理.排列组合.求和等方面的数学知识. 一 基本概念 杨辉三角,又称贾宪三角.帕斯卡三角,是二项式系数在三 ...
- C语言杨辉三角代码详解(超级详细,真的不进来看看吗?)
杨辉三角:是二项式系数在三角形中的一种几何排列.它的两条斜边都是1,中间数字等于它肩上数字之和. 就像这样: 那么,如何用C语言写出杨辉三角呢? 思路 1.定义一个二维数组,赋初值为1,这里以四行四列 ...
- c语言杨辉三角解释,C语言杨辉三角是什么
在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的'关键之一.在高中的时候我们又知道,杨辉三角的任意一行都是的二项式系数,n为行数减1. ...
- c语言杨辉三角形7行7liu,7. C语言杨辉三角(两种方法)
杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是 1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一 ...
- C语言杨辉三角(用二维数组)
杨辉三角概述: 每行端点与结尾的数为1. 每个数等于它上方两数之和. 每行数字左右对称,由1开始逐渐变大. 第n行的数字有n项. 前n行共[(1+n)n]/2 个数. 第n行的m个数可表示为 C(n- ...
- c语言 杨辉三角(详解)
前言:杨辉三角,是二项式系数在三角形中的一种几何排列,出自中国南宋数学家杨辉1261年所著的<详解九章算法>,今天让我们用c语言来让杨辉三角呈现在我们面前! 目录 一.杨辉三角 二.问题分 ...
- C语言杨辉三角(不用数组)
程序分析: 前面已经介绍了用二维数组.一维数组写杨辉三角,这里再一种不用数组的方法,这种方法是三种当中最难的一个. 在写程序之前我们要发现杨辉三角的每个位置上的数字的特征,即: 第n行:第一个值是1, ...
- c语言杨辉三角的实现
杨辉三角的规律:两边斜线数字都是1,其他数都是它肩上两数之和. 下面给出示例: #include<stdio.h> #include <string.h> #define k ...
最新文章
- python代码统计字符串中大写字符、小写字符、特殊字符以及数值字符出现的次数
- 百度前端技术学院2017学习总结
- mysql主从备份失败--记录现象
- 魅族8.0系统手机最完美激活xposed框架的步骤
- 团队作业3——需求改进系统设计
- 刷网络课_网络营销实践心得—刘荟萌
- .NET生成常用16、32位MD5加密的两种方法
- Redis事务和秒杀业务设计
- Cloudstack
- 仅需1分钟,让你的电脑变无线路由器
- 计算机机房需求调查表,机房建设需求调查表机房建设需求调查表.doc
- 利用计算机指令清理垃圾,计算机Dos处理,编写一键清理系统垃圾的bat代码,小白都可以学...
- windows用VS2019下编译log4cxx日志库
- 如何使用Hyper-V Manager和Powershell合并Hyper-V检查点
- Aborted (core dumped)
- python连接oracle12c
- vue自定义弹窗dialog,vue 点击遮罩层功能区以外的地方关闭遮罩层
- 什么是memcache,常见的memcache方法
- gitee教程(超全,超详细,超长)
- 论文的黑斜体,白斜体是什么意思?