求助

P1255 数楼梯

wangyihan_ @ 2024-08-27 11:11:13

点5.6有前导0,点10 第1行 第1列 输出2,期望6

#include<bits/stdc++.h> 
using namespace std; 
int n,maxn=100000,a[1010],b[1010],c[1010],l;
int main()
{
    cin>>n;
    a[1]=1;
    b[1]=2;
    for(int i=3;i<=n;i++)
    {
        memset(c,0,sizeof(c));
        for(int j=1;j<=maxn;j++) c[j]=a[j]+b[j];
        for(int j=1;j<=maxn;j++)
        {
            c[j+1]+=c[j]/10;
            c[j]%=10;
        }
        for(int j=1;j<=maxn;j++) a[j]=b[j];
        for(int j=1;j<=maxn;j++) b[j]=c[j];
    }
    l=100000;
    while(l>1&&c[l]==0) l--;
    for(int i=l;i>=1;i--) printf("%d",c[i]);
    return 0;
}

by study_Zzz @ 2024-08-27 11:25:18


#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=5005;
int f[N][N];
int lenc=1;
int n;
void gadd(int k){
    for(int i=1; i<=lenc; i++){
        f[k][i]=f[k-1][i]+f[k-2][i];
    }
    for(int i=1; i<=lenc; i++){
        if(f[k][i]>9){
            f[k][i+1]+=f[k][i]/10;
            f[k][i]%=10;
        }
    }
    if(f[k][lenc+1]>0)
      lenc++;
    while(f[k][lenc]==0 && lenc>1)
      lenc--;
}
int main(){
    cin >> n;
    f[1][1]=1, f[2][1]=2;
    for(int i=3; i<=n; i++)
      gadd(i);
    for(int i=lenc; i>=1; i--)
      cout << f[n][i];
    return 0;
}

by study_Zzz @ 2024-08-27 11:26:41

递推式:f[k][i]=f[k-1][i]+f[k-2][i]


by study_Zzz @ 2024-08-27 11:27:46

你不能用一维的


by wangzhenshu @ 2024-08-27 11:27:48

首先1,2要特判 还有(maxn=100000,a[1010],b[1010],c[1010]) 这里数组的范围比maxn小,肯定越界


by wangzhenshu @ 2024-08-27 11:29:02

以上就是全部问题


by study_Zzz @ 2024-08-27 11:29:50

按照你这样的应该是:


a[0]=1;
b[1]=2;
for(int i=2;i<=n;i++){
    ............
}
........

by wangyihan_ @ 2024-08-27 18:24:28

已AC,谢


|