题目描述

输入数字 n ,打印 n 行杨辉三角

1

1 1

1 2 1

1 3 3 1

……

小贴士:什么是杨辉三角?

定义:

  1. 每个数等于它上方两数之和。

  2. 每行数字左右对称,由1开始逐渐变大。

  3. 第n行的数字有n项。

  4. 前n行共[(1+n)n]/2 个数。

  • 详情见上图


解题思路

1、根据杨辉三角的性质得:因为有 n 行,且每行有 n 个元素,所以可以创建一个二维数组arr[ 30 ][ 30 ] = { 0 }  和一个 int 类型的变量 n 。

int arr[30][30] = { 0 }, n = 0;

2、因为输入数字即可打印对应行数的杨辉三角,所以这里采用 while 循环,我们先将每一行和每一行内的基本框架打印出来,这里用 rowcolumn 控制行与列。

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

我们先分析上图,设 n5 则第 n - 0(5)行的空格为 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语言】打印杨辉三角相关推荐

  1. 利用C语言打印杨辉三角

    利用C语言打印杨辉三角 此次打印的杨辉三角格式如下: 我们此次以15行的杨辉三角为例. 首先来说一下基本的思路 通过观察可知,如果把杨辉三角看成是一个大的三角形,其第一列和对角线的值均为1. 从第3行 ...

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

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

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

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

  4. 如何用C语言打印杨辉三角

    用C语言在屏幕上打印杨辉三角 杨辉三角 运行结果图 代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<a ...

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

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

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

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

  7. C语言 打印杨辉三角

    杨辉三角的两个腰边的数都是1,其他位置的数都是它头顶上两个数字之和. #include<stdio.h> int main() {int n, i, j;int arr[10][10];p ...

  8. 杨辉三角c语言程序for循环,C语言循环结构 -C语言打印杨辉三角

    杨辉三角形是一个由数字排列组成的三角形数表.其一般形式如图 1 所示,每行开始和结尾处的数字都为 1,其他数字都是它所在行的上一行中靠近它的两个数之和. 图 1:杨辉三角形 请编程输出其中的前 n(n ...

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

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

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

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

最新文章

  1. Dependency 'mysql:mysql-connector-java:5.1.28' not found【解决方案】
  2. tls 使用java生成_同时使用传入和传出连接时,相互TLS身份验证存在Java问题
  3. 前端学习(1300)报错:无法加载文件 D:\nodejs\node_global\webpack.ps1,因为在此系统上禁止运行脚本...
  4. 安装 Win10 Ubuntu 16.04 双系统以及 Ubuntu 配置深度学习环境记录
  5. 2699元起!格力首款5G手机悄然上架:骁龙765G处理器
  6. 导出excel写入公式_乱码、公式出错、效率低,这些excel“事故”的解决办法来了...
  7. require mysql.php_require和include经典一例抛析_php
  8. 使用Maven开发Hadoop
  9. 【OpenCV】图像金字塔详解及编程实现
  10. 详解JavaScript的五种继承方式
  11. 大话西游,唐僧与悟空合伙创业,股权几何?
  12. 300行python代码从零开始构建基于知识图谱的电影问答系统4-用户问题预处理
  13. domcontentloaded事件和laod事件区别
  14. 【动态规划】字符串编辑距离(Levenshtein距离)算法
  15. 安卓手机端口号怎么查看_安卓手机里的专业模式究竟该怎么拍?
  16. 浙江咪咕MGV3200_KLH_国科GK6323_2+8_免拆机卡刷固件包
  17. MacBook下使用VirtualBox虚拟Win7时设置分辨率为2560*1440
  18. 嘟嘟牛app算法hook
  19. 小学阅读方法六种_小学写作手法六种
  20. 如何从0开始在鸿蒙OS中制作一个APP!

热门文章

  1. 用touchstart、touchmove、touchend简陋实现左右滑动【触摸事件】
  2. 网页端搭建视频流实时播放平台/直播平台(FFmpeg+SRS+http-flv+flv.js+h5)
  3. AD22安装Ansys EDB Exporter 扩展 将PCB导入到ANSYS Electronics Desktop
  4. solidworks实用小技巧:批量打印工程图图纸
  5. Accessing Data in Pivotal GemFire with REST
  6. 单片机0804AD转换c语言程序,模数转换芯片ADC0804的应用
  7. java copy 软连接文件夹_文件文件夹映射junction和mklink,创建软硬链接
  8. 电路邱关源学习笔记——1.1电路模型
  9. 计算机一级真题模拟试题,2016年3月计算机一级真题模拟试题及答案.doc
  10. 停更后的第2030天,斜杠青年的新头衔,职场人的最终归宿!