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

2023-05-16

 题目>>>

        用C语言打印杨辉三角。杨辉三角参考图如下:

分析>>>

        于是不清楚杨辉三角的同学们可以上网查查,可以立刻知道它的相关推理归纳和公式总结。它的简介如下:

 所以我们可以使用二项式的方法来写代码。但我下面要讲的是直接观察已有数据来写。

        下面再放上一张多数据的图便于我们找规律:

        直观看出三角形的两边都是 1 ,每一行的数的个数等于该行行数。(从第三行开始)被两边的 1 包围着的数据中,每个数等于它上一行前一列的数和上一行本列数之和。OK ,这是关于数字。

        不要忘了“三角形”效果,我们知道要打印出三角形效果就要在每行开始先打印空格,把数字挤到中间,在按照行数依次减少空格。

思考>>>

        仔细观察,根据以上分析,我们发现每步打印都与该行行数相关。中间数据由其上一行数据控制,而上一行数据最终由三角形边上的 1 控制。所以我们可以使用二维数组。使用二维数组就可以同时对相邻两行的数据按照相同的规则进行操作,三角形中间数据的计算和使用恰好要同时使用两行数据。

        接着先写循环把二维数组对应三角形的边的部分赋值为 1 ,就可以处理中间数据了。

        在这里需要注意的是,因为对上一段落代码的实现有些小复杂。 我们先研究数字打印,最后在无脑加上这些空格,还原成三角形。然后一步一步来写,写完一步打印出来看看结果,正确了就继续写。

代码>>>

        就是先实现这张图:

打印 1 >>> 

         每行首元素是 1 ,第 n 行 的第 n 个元素是 1 。(末位)

#include<stdio.h>
int main()
{
	int arr[10][10] = { 0 }; //要先初始化
	int a = 1;
	int b = 1;
	for (a = 0;  a < 10; a++)
	{
		arr[a][0] = 1; //每行首元素是 1

		for (b = 0; b <=a; b++)
		{
			if(a==b)
			arr[a][b] = 1; //每行末位是 1
		}

	}

//打印出来看看上面写的对不对

	for (a = 0; a < 10; a++)
	{
		for (b = 0; b <=a; b++)
		{
			printf("%d ", arr[a][b]);
		}
		printf("\n");

	}

	return 0;
}

注意访问数组是从下标0开始的。(数组的最低下标是0)此处数组下标0对应第一行。

打印结果图:

 打印中间数据 >>>

        要操作每个中间数据,就继续在循环内部加上 arr[a][b]的值在打印。

#include<stdio.h>
int main()
{
	int arr[10][10] = { 0 };
	int a = 1;
	int b = 1;	
    for (a = 0;  a < 10; a++)
	{
	
		arr[a][0] = 1;

		for (b = 0; b <=a; b++)
		{
			if(a==b)
            {
			   arr[a][b] = 1;
            }

			if(a>1 && b>=1)        //注意这里的判断条件
            {
			arr[a][b] = arr[a - 1][b - 1] + arr[a - 1][b];//上一行前一列和本列数之和
            }

            printf("%d ", arr[a][b]);//赋值完一行后直接整行数据都打印
		}
		printf("\n");
	}
	return 0;
}

打印效果图:

        注意这里的判断条件,1表示的是视觉上的第二行(行数从0开始计算)。根据“杨辉三角”我们可以看出在视觉上的第三行第二列才开始计算中间数据。

打印空格>>>

         b-- 先使用再减减。

//b = 10 - a;
//while (b--)
//{
//	printf(" ");
//}

//喜欢两种循环的都可以参考一下,上面精简点

for (b = 10 - a; b > 0; b--)
{
	printf(" ");
}

 总代码>>>

int main()
{
	int arr[10][10] = { 0 };
	int a = 1;
	int b = 1;

	for (a = 0;  a < 10; a++)
	{
		b = 10 - a;
	    while (b--)
		{
			printf(" ");
		}

		arr[a][0] = 1;//注意访问数组是从0开始(数组的最低下标是0)

		for (b = 0; b <=a; b++)
		{
			if(a==b)
			arr[a][b] = 1;
			if(a>1 && b>=1)
			arr[a][b] = arr[a - 1][b - 1] + arr[a - 1][b];//上一行前一列和本列数之和
			printf("%d ", arr[a][b]);//赋值完一行后直接打印得到的整体打印效果就是直接
		}

		printf("\n");
	}

	return 0;
}

最终效果图: 

         emmmm,好像现实打印出来的三角还是丑了点,至于解决办法,我暂时没想到。(菜还是我菜.jpg) 哪位大佬知道的话欢迎评论留言给我解答,十分感谢。 ^ ^

 小小思考>>>

        使用二维数组可以同时改变相关性强的行和列,注意它的巧妙使用。可以看看我写的C语言游戏来练习二维数组的使用。嘿嘿,博客链接 —> [C语言] [游戏] 三子棋  和 [C语言] [游戏] 扫雷

        刚开始分着写,每写完一层后就打印确认一下。写完后发现赋值和打印使用的相同的循环,故可以把它们放在一起写,还有那个while循环的后置加加条件也很好,精简了代码。

        我们对下一行的数来赋值,这样做的好处是不改变上一行的值,对于本题也更符合实际规律,让其按顺序打印,这样避免了可能的手滑。
 

最重要的话>>>

           不理解的记得私信我哦 ^ ^。

        (直接评论区留言也可以^ ^)

———————————————————————————————————————————

        十分感谢评论区大佬们的解答——把while循环中打印空格的地方从原来的打印一个空格改成打印两个空格。然后把for循环中打印数值那使用  printf("%-3d ", arr[a][b]);  表示以左对齐、默认3个字符宽度打印数据。那么就能把每一列的宽度都确定为3个字符,也就是每个数字之间的间隙变为固定的了。

        然后执行结果是这样,美观多了。^ ^

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[C语言] [典例详解] 打印杨辉三角(找规律简单实现) 的相关文章

随机推荐

  • 开启Mac os系统原生的NTFS读写功能

    开启Mac os系统原生的NTFS读写功能 早期的Mac OS是可以通过修改mount ntfs指令实现的 但是10 5以后的版本都不可以编译了 xff0c 打开是乱码 只能说微软霸道 后来只能用破解版的Paragon NTFS for M
  • 卷积神经网络的旋转不变性和尺度变化

    从一些论文的研究表明 xff0c 卷积神经网络的旋转不变性似乎是一个伪命题 xff0c 卷积网络的旋转不变性主要是通过数据的增强和大样本的学习获取的 xff0c 本身应该不具备旋转不变性 旋转不变性和尺度变化会影响目标检测算法的基本框架 现
  • linux下使用apktool破解修改安卓apk

    自己平常用linux操作系统 xff0c 某时突然想改个安卓的游戏 1 安装jre http java com zh CN download index jsp 找到合适自己的版本 2 解压文件 tar zxvf jrexxxx tar g
  • c语言之移位运算

    移位运算 左移 逻辑左移和算数左移的效果是一样的 xff0c 高位移出 xff0c 低位补0 对于一个位长位W的数来说 xff0c 左移K位 xff08 通常来讲K lt W 高k位移出 xff0c 低k位补0 把下面这个w位的位向量左移K
  • tesseract-ocr 识别图片中的数字

    环境 windows 需要的软件 装了一定软件以后就可以用cmd命令 解析图片了 不过不是很准 第二个软件是用来训练第一个软件的 准备一张验证码试试 打开命令行试试 还行 换一个 不行了 用第二个软件训练一下看看效果 第一步双击train
  • 火狐与IE的Cookie位置(原)

    火狐浏览器中Cookie存储位置 xff1a 一般WIN XP系统的FF cookie存放于 xff1a C Documents and Settings 你的用户名 Application Data Mozilla Firefox Pro
  • MFC树型控件浏览文件目录(二)--双击打开文件

    今天我们来实现在树型控件中双击打开文件的操作 xff0c 注意这里只是打开文件 xff0c 并没有打开文件夹 xff08 不过你想打开也非常简单 xff09 转载书接上文 xff0c 今天我们来实现在树型控件中双击打开文件的操作 xff0c
  • c#入门-创建项目

    新建项目 在你安装完成Visual Studio后打开它 你会的到一个启动窗口 本教程使用控制台应用程序进行 点击创建新项目 xff0c 选择右上角c 的没有Framework的控制台应用 项目名称 xff0c 位置自己随意 目标框架选择N
  • Windows环境下编译FreeRDP

    转载 xff1a http www cnblogs com sherwin security archive 2012 07 13 2590965 html 一 工具准备 visual Studio 2010cmake xff0c 下载网址
  • sublime4安装和汉化

    sublime4安装和汉化 文章目录 sublime4安装和汉化一 下载sublime text4二 安装三 汉化 一 下载sublime text4 官网下载 xff1a http www sublimetext com download
  • 基于树莓派通过蓝牙进行Wi-Fi网络配置

    树莓派上有非常丰富的接口 xff0c 不过有个小问题就是 xff0c 如果没有屏幕 xff0c 串口或者有线网络 xff0c 只能依赖于Wi Fi网络的话 xff0c 到一个新环境需要配置Wi Fi接入网络时 xff0c 就有点小麻烦 树莓
  • 实战教程丨手把手教您在 Raspberry Pi 上设置集群(一)

    出品丨Docker公司 xff08 ID xff1a docker cn xff09 编译丨小东 每周一 三 五晚6点10分 与您不见不散 xff01 说在前面 有什么比在 Raspberry Pi 上安装 Docker Engine CE
  • 基于树莓派运行OpenWrt固件

    OpenWrt是应用广泛的路由器固件 xff0c 在OpenWrt的官方网站上 xff0c 提供了众多路由器的固件版本供下载 xff0c 其中也有支持树莓派的版本 xff0c 话不多说 xff0c 直接下载来玩一玩 1 固件下载 登录Ope
  • 基于树莓派开机自启动chromium打开网页的监控看板

    因工作需求 xff0c 要在显示器上打开某平台的监控网页 xff0c 持续跟踪和监测平台的运行参数和指标 因为需要24小时运行 xff0c 不想为此单独占用一台电脑 xff0c 就想用低功耗且小巧的树莓派作为主机 xff0c 本身树莓派也安
  • 基于树莓派的网络打印服务器

    网络上关于 基于树莓派的网络打印服务器 的资料非常多了 xff0c 感谢大神们的无私分享 xff0c 才能让技术不停传递 xff0c 造福所有人 xff01 建这个服务器的起因和目的很简单 xff1a 1 手边有树莓派 2 家里有闲置的US
  • 基于树莓派的DLNA和Airplay无线音频传输

    首先 xff0c 感谢网络上国内外各位大神 xff0c 我只是依葫芦画瓢的做了试验实现了基于树莓派的DLNA和Airplay无线音频传输的功能 因为过程中也走了弯路有些问题 xff0c 所以这里也只是来记录一下操作过程 xff0c 整个实现
  • 基于树莓派的蓝牙音频接收器

    首先声明一下 xff0c 本文内容参考如下国外大神的配置过程进行操作并成功实现基于树莓派的蓝牙音频接收功能 xff1a https thecodeninja net 2016 06 bluetooth audio receiver a2dp
  • 基于树莓派和Homebridge实现小米智能插座的控制

    首先声明本文纯属依照如下链接的文章进行测试的小结 xff1a https www wandianshenme com play siri iphone homekit control xiaomi devices by homebridge
  • [C语言] [试题详解] 求1000之内的所有 完数

    题目 gt gt gt 一个数如果恰好等于它的因子之和 xff0c 这个数就称为 完数 例如 xff0c 6的因子为1 2 3 xff0c 而6 xff1d 1 xff0b 2 xff0b 3 xff0c 因此6是 完数 编程序找出1000
  • [C语言] [典例详解] 打印杨辉三角(找规律简单实现)

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