C语言 杨辉三角

输出杨辉三角的前10行

让我们来看一下什么叫做杨辉三角,我们可以一步一步简化
在这里插入图片描述

分析:
我把解决这个问题分为了三步:

  1. 赋1
  2. 填空
  3. 输出

首先由题目可知我们需要定义一个10*10的二维数组。

第一步赋1是什么意思呢?

  • 观察图像可以知道,首列和尾列都是1,那我们的第一步操作就是对首列和尾列赋值为1。

第二步填空又是什么意思呢?

  • 假设我们已经完成了首列和尾列的赋值,那么中间是不是空缺的。我们的第二步操作就是填补中间空缺的不部分。

第三步输出是啥咧?

  • 我们完成了前两部操作,我们已经把所需要的值全都存放再数组里了,观察这个数组,它是由空格和数组里的数据组成,所以第三步完成的就是它的输出。

(提示:手机用户可以左划代码部分查看注释)

#include "stdio.h"
void main(){
	int i,j;
	int a[10][10];
	
	//对首列和尾列赋值为 1
	for( i=0; i<10; i++){
		a[i][0]=1;
		a[i][i]=1;
	}
	
	//填补中间空缺的地方
	for( i=2 ;i<10;i++){
		for(j=1 ;j<i ;j++){
				a[i][j]=a[i-1][j]+a[i-1][j-1];
		}		
	}
	//输出
	for(i=0; i<10;i++){
		for(j=18-i*2;j>0;j--){		//空格
			printf(" ");
		}
		
		for(j=0 ;j<=i ; j++){		//数组
			
			printf("%-4d",a[i][j]);	
		}
	printf("\n");					//换行
	}
}

具体解析

一样的,我们一步一步来
1.赋1

for( i=0; i<10; i++){		//用i来控制对数组的赋值i的值是0-9
		a[i][0]=1;			//对数组的首列赋值为1
		a[i][i]=1;			//对我们需要的尾列进行赋值(数组的对角线)
	}

2.填空

for( i=2 ;i<10;i++){			//i控制行数,和数组的行标
		for(j=1 ;j<i ;j++){		//这里j控制填空的个数,数组的列标	
			a[i][j]=a[i-1][j]+a[i-1][j-1];	//这里对空缺部分赋值
		}		
	}

第一个外循环为什么从二开始?因为第一行和第二行的首尾列都是1,已经被我们赋值了,所以我们从第三行第二个开始填空,对应的下标为a[2][1]这里列标由内循环控制,为1,这样我们第三行就已经填补完成,之后内循环让它和i形成一个条件,让它只有在空间的部分进行赋值。
3.输出

for(i=0; i<10;i++){					//i值控制数组的行标和行数
		for(j=18-i*2;j>0;j--){		//输出空格,空格每行减少2个
			printf(" ");
		}
		for(j=0 ;j<=i ; j++){		//输出数组
			printf("%-4d",a[i][j]);	//这里左对齐控制4位十进制,因为图中有126三位,我们空一格	
		}							
	printf("\n");					//换行
	}

看完的同学会不会有种恍然大悟的感觉?
那最后让我们来运行一下这段代码,看看是否和之前我们看的图片一个样子

运行结果

在这里插入图片描述
我们可以看见跟之前看到图片可谓一摸一样,今天的杨辉三角就到此结束,还是那句话一遍看不懂别担心,再看一遍。成长的路上总是枯燥的,没有人可以陪你,只有你自己坚持下去突破瓶颈。

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值