鱼C论坛

 找回密码
 立即注册
查看: 2394|回复: 1

[已解决]数组

[复制链接]
发表于 2022-12-4 20:47:38 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int i,j,a[8]={1};
                          printf("%3d\n",a[0]);
                          for(i=1;i<8;i++)
                          {
                              a[i]=1;
                              for(j=i-1;j>0;j--)
                              a[j]=a[j]+a[j-1];
                              for(j=0;j<=i;j++)
                              printf("%3d",a[j]);
                              printf("\n");
                          }
请问,这个程序是怎么运行的看不明白
最佳答案
2022-12-5 08:12:34
本帖最后由 zhangjinxuan 于 2022-12-5 08:18 编辑

这个是在打印杨辉三角,如果我们把整个杨辉三角看作一个二维数组 a,那么:
a[i][j] = a[i - 1][j] + a[i - 1][j - 1]
也就是说,这个数字由上一行相邻的两个数字组成

既然知道了递推公式,写出代码也就是很简单的了:
#include <cstdio>
int main() {
        int i,j,a[8]={1}; //初始化 a 数组,这里用到了一个小技巧,用一维,为什么这能正常运行之后再讲
    printf("%3d\n",a[0]); //打印首项
    for(i=1;i<8;i++)
    {
        a[i]=1; //杨辉三角每行的第一列总是1
        for(j=i-1;j>0;j--)
            a[j]=a[j]+a[j-1]; //实际上, a[j] 就是前一行计算的结果,因为这时a[j]还没有计算,a[j]也就只能保留上一行的结果了,还因为 j 是从大到小的,a[j-1]仍然是保留上一行的结果所以 a[j-1]也是上一行左边的数字,所以,在a[j]还没有计算之时, a[j] 和 a[j-1] 加起来就是 i 行 j 列的实际结果
        for(j=0;j<=i;j++)
            printf("%3d",a[j]); //打印
        printf("\n");
        }
}

如果你还是不理解为什么1维也是对的,那就纸上模拟一下,或者画一个图也可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-5 08:12:34 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zhangjinxuan 于 2022-12-5 08:18 编辑

这个是在打印杨辉三角,如果我们把整个杨辉三角看作一个二维数组 a,那么:
a[i][j] = a[i - 1][j] + a[i - 1][j - 1]
也就是说,这个数字由上一行相邻的两个数字组成

既然知道了递推公式,写出代码也就是很简单的了:
#include <cstdio>
int main() {
        int i,j,a[8]={1}; //初始化 a 数组,这里用到了一个小技巧,用一维,为什么这能正常运行之后再讲
    printf("%3d\n",a[0]); //打印首项
    for(i=1;i<8;i++)
    {
        a[i]=1; //杨辉三角每行的第一列总是1
        for(j=i-1;j>0;j--)
            a[j]=a[j]+a[j-1]; //实际上, a[j] 就是前一行计算的结果,因为这时a[j]还没有计算,a[j]也就只能保留上一行的结果了,还因为 j 是从大到小的,a[j-1]仍然是保留上一行的结果所以 a[j-1]也是上一行左边的数字,所以,在a[j]还没有计算之时, a[j] 和 a[j-1] 加起来就是 i 行 j 列的实际结果
        for(j=0;j<=i;j++)
            printf("%3d",a[j]); //打印
        printf("\n");
        }
}

如果你还是不理解为什么1维也是对的,那就纸上模拟一下,或者画一个图也可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-20 20:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表