数组
int i,j,a={1};printf("%3d\n",a);
for(i=1;i<8;i++)
{
a=1;
for(j=i-1;j>0;j--)
a=a+a;
for(j=0;j<=i;j++)
printf("%3d",a);
printf("\n");
}
请问,这个程序是怎么运行的看不明白 本帖最后由 zhangjinxuan 于 2022-12-5 08:18 编辑
这个是在打印杨辉三角,如果我们把整个杨辉三角看作一个二维数组 a,那么:
a = a + a
也就是说,这个数字由上一行相邻的两个数字组成
既然知道了递推公式,写出代码也就是很简单的了:
#include <cstdio>
int main() {
int i,j,a={1}; //初始化 a 数组,这里用到了一个小技巧,用一维,为什么这能正常运行之后再讲
printf("%3d\n",a); //打印首项
for(i=1;i<8;i++)
{
a=1; //杨辉三角每行的第一列总是1
for(j=i-1;j>0;j--)
a=a+a; //实际上, a 就是前一行计算的结果,因为这时a还没有计算,a也就只能保留上一行的结果了,还因为 j 是从大到小的,a仍然是保留上一行的结果所以 a也是上一行左边的数字,所以,在a还没有计算之时, a 和 a 加起来就是 i 行 j 列的实际结果
for(j=0;j<=i;j++)
printf("%3d",a); //打印
printf("\n");
}
}
如果你还是不理解为什么1维也是对的,那就纸上模拟一下,或者画一个图也可以
页:
[1]