【C语言】打印杨辉三角
题目描述
输入数字 n ,打印 n 行杨辉三角
1
1 1
1 2 1
1 3 3 1
……
小贴士:什么是杨辉三角?
定义:
每个数等于它上方两数之和。
每行数字左右对称,由1开始逐渐变大。
第n行的数字有n项。
前n行共[(1+n)n]/2 个数。
详情见上图
解题思路
1、根据杨辉三角的性质得:因为有 n 行,且每行有 n 个元素,所以可以创建一个二维数组arr[ 30 ][ 30 ] = { 0 } 和一个 int 类型的变量 n 。
int arr[30][30] = { 0 }, n = 0;
2、因为输入数字即可打印对应行数的杨辉三角,所以这里采用 while 循环,我们先将每一行和每一行内的基本框架打印出来,这里用 row 与 column 控制行与列。
int arr[30][30] = { 0 }, n = 0; int row = 0, column = 0; while (scanf("%d", &n))//只要输入的数大于 0 均可进入循环{for (row = 0; row < n; row++) //数组中第一行的下标,即 row 为 0 ,所以得从 0 开始{for (column = 0; column <= row; column++)// 保证 行数=每行元素个数{if (column == 0 || column == row) //将每行第一个元素与最后一个元素初始化为 1{arr[row][column] = 1;}printf("%3d ", arr[row][column]); //打印}printf("\n"); // 换行}}
下面是运行结果:
3、填充中间的元素,根据定义1:“每个数等于它上方两数之和” 我们可知:坐标为
(row,column)元素的值为(row - 1,column)与(row - 1,column - 1)的和即:
arr[ row ][ column ] = arr[ row - 1 ][ column ] + arr[ row - 1 ][ column - 1 ]。我们将这行代码放在 if 语句之后即可
else {arr[row][column] = arr[row - 1][column] + arr[row - 1][column - 1]; }
下图为运行结果
4、此时我们已完成任务,但是我们目前打印出来的还只是直角三角形并不够美观,我们还需将他美化成等腰三角形。
11 11 2 11 3 3 1 1 4 6 4 1
我们先分析上图,设 n 为 5 则第 n - 0(5)行的空格为 0 ,n - 1(4) 行的空格为 1, n - 2 (3)行的空格为2,第 n - 3(2)行的空格为 3, 第n - 4(1)的空格为 4
由此我们可以得出结论:当我们设定 n 行时,其第一行的空格数为 n - 1 个开始每行减一个空格数知道最后一行空格为0,所以我们可以在打印每行数字之前放入一个打印空格的循环。
int b = 0;for (b = 0; b < n - 1 - row; b++){printf(" ");}
最后我们将打印出的数向右对其,只需将 %d 改成 %nd 即可,我这里选择向右对其3位数改成 %3d 就可以了。
程序源码
#include <stdio.h>int main() {int arr[30][30] = { 0 }, n = 0, row = 0, column = 0;while (scanf("%d", &n))//只要输入的数大于 0 均可进入循环{for (row = 0; row < n; row++)//数组中第一行的下标,即 row 为 0 ,所以得从 0 开始{int b = 0;for (b = 0; b < n - 1 - row; b++)//打印每行前面的空格{printf(" ");}for (column = 0; column <= row; column++) // 保证 行数=每行元素个数{if (column == 0 || column == row)//将每行第一个元素与最后一个元素初始化为 1{arr[row][column] = 1;}else{arr[row][column] = arr[row - 1][column] + arr[row - 1][column - 1]; //填充中间元素}printf("%3d ", arr[row][column]); //打印杨辉三角}printf("\n");//换行}}return 0; }
运行结果
总结
将二维数组这个相对抽象的概念运用到实际中,有助于我们对于二维数组的理解。但该代码也比较大的缺点, 如第一行arr[ 1 ][ column ]中,真正有用的只有arr[ 1 ][ 1 ],arr[ 1 ][ 1 ] 之后的空间都被闲置了。就如同我买了一间正方形的屋子,我只能用其一半的面积。
* * * * * * * * * * * *闲置 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
【C语言】打印杨辉三角相关推荐
- 利用C语言打印杨辉三角
利用C语言打印杨辉三角 此次打印的杨辉三角格式如下: 我们此次以15行的杨辉三角为例. 首先来说一下基本的思路 通过观察可知,如果把杨辉三角看成是一个大的三角形,其第一列和对角线的值均为1. 从第3行 ...
- 杨辉三角c语言编程报告,C语言打印杨辉三角示例汇总
杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一. ...
- 用linux编译打印杨辉三角形,C语言打印杨辉三角代码及解析
杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一. ...
- 如何用C语言打印杨辉三角
用C语言在屏幕上打印杨辉三角 杨辉三角 运行结果图 代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<a ...
- C语言打印杨辉三角的多种方法
3.在屏幕上打印杨辉三角. 1 1 1 1 2 1 1 3 3 1 解法一: #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> in ...
- c语言打印杨辉三角七阶,C语言实现:打印杨辉三角
杨辉三角的样式如下: 1 1 1 1 2 1 1 3 3 1 --------------------------------------------------------------------- ...
- C语言 打印杨辉三角
杨辉三角的两个腰边的数都是1,其他位置的数都是它头顶上两个数字之和. #include<stdio.h> int main() {int n, i, j;int arr[10][10];p ...
- 杨辉三角c语言程序for循环,C语言循环结构
-C语言打印杨辉三角
杨辉三角形是一个由数字排列组成的三角形数表.其一般形式如图 1 所示,每行开始和结尾处的数字都为 1,其他数字都是它所在行的上一行中靠近它的两个数之和. 图 1:杨辉三角形 请编程输出其中的前 n(n ...
- [C语言] [典例详解] 打印杨辉三角(找规律简单实现)
题目>>> 用C语言打印杨辉三角.杨辉三角参考图如下: 分析>>> 于是不清楚杨辉三角的同学们可以上网查查,可以立刻知道它的相关推理归纳和公式总结.它的简介如下: ...
- 打印杨辉三角的9种方法与解析
打印杨辉三角 杨辉三角科普: 杨辉三角,是二项式系数在三角形中的一种几何排列.每个数等于它上方两数之和.如图: C语言打印杨辉三角的方法 解法一 #include <stdio.h> in ...
最新文章
- Dependency 'mysql:mysql-connector-java:5.1.28' not found【解决方案】
- tls 使用java生成_同时使用传入和传出连接时,相互TLS身份验证存在Java问题
- 前端学习(1300)报错:无法加载文件 D:\nodejs\node_global\webpack.ps1,因为在此系统上禁止运行脚本...
- 安装 Win10 Ubuntu 16.04 双系统以及 Ubuntu 配置深度学习环境记录
- 2699元起!格力首款5G手机悄然上架:骁龙765G处理器
- 导出excel写入公式_乱码、公式出错、效率低,这些excel“事故”的解决办法来了...
- require mysql.php_require和include经典一例抛析_php
- 使用Maven开发Hadoop
- 【OpenCV】图像金字塔详解及编程实现
- 详解JavaScript的五种继承方式
- 大话西游,唐僧与悟空合伙创业,股权几何?
- 300行python代码从零开始构建基于知识图谱的电影问答系统4-用户问题预处理
- domcontentloaded事件和laod事件区别
- 【动态规划】字符串编辑距离(Levenshtein距离)算法
- 安卓手机端口号怎么查看_安卓手机里的专业模式究竟该怎么拍?
- 浙江咪咕MGV3200_KLH_国科GK6323_2+8_免拆机卡刷固件包
- MacBook下使用VirtualBox虚拟Win7时设置分辨率为2560*1440
- 嘟嘟牛app算法hook
- 小学阅读方法六种_小学写作手法六种
- 如何从0开始在鸿蒙OS中制作一个APP!
热门文章
- 用touchstart、touchmove、touchend简陋实现左右滑动【触摸事件】
- 网页端搭建视频流实时播放平台/直播平台(FFmpeg+SRS+http-flv+flv.js+h5)
- AD22安装Ansys EDB Exporter 扩展 将PCB导入到ANSYS Electronics Desktop
- solidworks实用小技巧:批量打印工程图图纸
- Accessing Data in Pivotal GemFire with REST
- 单片机0804AD转换c语言程序,模数转换芯片ADC0804的应用
- java copy 软连接文件夹_文件文件夹映射junction和mklink,创建软硬链接
- 电路邱关源学习笔记——1.1电路模型
- 计算机一级真题模拟试题,2016年3月计算机一级真题模拟试题及答案.doc
- 停更后的第2030天,斜杠青年的新头衔,职场人的最终归宿!