1203081549 发表于 2022-12-4 20:47:38

数组

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:12:34

本帖最后由 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]
查看完整版本: 数组