大家好,本文主要讲两种在C语言中实现杨辉三角形的方法。有兴趣的同学过来看看。如果对你有帮助,记得收藏起来下次浏览。
目录
杨辉三角——C语言实现方法一:用二维数组实现方法二(方法一的改进):总结
杨辉三角——C语言实现
杨辉三角:
在屏幕上打印杨辉三角。
一个
1 1
1 2 1
1 3 3 1
……
根据上面的例子:
1.每行的第一个和第二个数字是1;
2.剩余的数字是正上方和正左侧的数字之和。
方法一:利用二维数组实现
解题思路:
根据杨辉三角形定律,我们可以定义一个二维数组来打印杨辉三角形,这里的数字定律是:
data[I][j]=data[I-1][j]data[I-1][j-1],所以我们可以按照这个方法把数据填入二维数组,并打印出来。
代码如下:
#包含stdio.h
int main()
{
int n;
int data[30][30]={ 1 };//直接填第一行,就是1
Printf('请输入要打印的行数:');
scanf('%d ',n);
for(int I=1;I n;I )//从第二行开始填写
{
data[I][0]=1;//将每行的第一列初始化为1,以防止它越界。
for(int j=1;j I 1;j)
{
data[I][j]=data[I-1][j]data[I-1][j-1];
}
}
for(int I=0;I n;I )//打印一个二维数组
{
for(int j=0;j I 1;j)
{
printf('%d ',data[I][j]);
}
printf(' \ n ');
}
返回0;
}
运行结果:
方法二(对方法一的改进):
因为我在第n行填写杨辉三角形的时候,只和第n-1行的杨辉三角形有联系,和前面的没有联系,所以不需要保存每行的杨辉三角形。使用一维数组,我只要填一行,打一行就可以了,可以把空间复杂度从O(n 2)降低到O(n)。但是之前的数据在填写数据的时候是不能覆盖的,所以需要从后往前填写。但填充杨辉三角形的顺序对结果没有影响,所以可以实现。
代码如下:
#包含stdio.h
int main()
{
int n;
int data[30]={ 1 };
Printf('请输入要打印的行数:');
scanf('%d ',n);
printf(' 1 \ n ');//直接打印第一行
for(int I=1;I n;I )//从第二行开始
{
for(int j=I;j 0;j-)//从后往前填,避免前一行的数据在使用前被覆盖。
{
data[j]=data[j-1];
}
for(int j=0;j=I;j)
{
printf('%d ',data[j]);
}
printf(' \ n ');
}
返回0;
}
运行结果:
总结
关于在C语言中实现杨辉三角形的两种方法的文章到此结束。关于C语言杨辉三角形的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。