输出杨辉三角的前10行
让我们来看一下什么叫做杨辉三角,我们可以一步一步简化
分析:
我把解决这个问题分为了三步:
- 赋1
- 填空
- 输出
首先由题目可知我们需要定义一个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"); //换行
}
看完的同学会不会有种恍然大悟的感觉?
那最后让我们来运行一下这段代码,看看是否和之前我们看的图片一个样子
运行结果
我们可以看见跟之前看到图片可谓一摸一样,今天的杨辉三角就到此结束,还是那句话一遍看不懂别担心,再看一遍。成长的路上总是枯燥的,没有人可以陪你,只有你自己坚持下去突破瓶颈。