蒟蒻的一点疑问

P1255 数楼梯

Surge_of_Force @ 2021-02-14 12:40:28

各位dalao 为什么我这样加和进位一起只过两个点

for(int i=3;i<=n;i++)
        for(int j=1;j<=1200;j++)
    {
        a[i][j]=a[i-1][j]+a[i-2][j];
        while(a[i][j]>9)
        {
            a[i][j+1]++;
            a[i][j]-=10;
        }
    }

而这样分开就A了呢

    for(int i=3; i<=n; i++) {
        for(int j=1; j<=1200; j++) {
            a[i][j]=a[i-1][j]+a[i-2][j];
        }
        for(int j=1; j<=1200; j++) {
            while(a[i][j]>9) {
                a[i][j+1]++;
                a[i][j]-=10;
            }
        }
    }

感谢


by Surge_of_Force @ 2021-02-14 12:41:55

开二维数组是为了高精 不想开字符串


by LYNiko @ 2021-02-15 11:49:19

因为while循环中用到了a[i][j+1],而这个是要先通过第一个for循环初始化的

用第一种方法,在进位后会被下一次的循环覆盖掉;

而用第二种,就是正解:先按位累加,再逐个进位

(洛谷吞评论qwq)


|