20分的,求助求助。

P1255 数楼梯

456laji @ 2020-05-16 19:47:01

代码丑陋,见谅。

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N=1e5+10;
ull num[N];

int solv(int w,int *a,int lena,int *b,int lenb,int k)
{

    if(w==k) 
    {
        for(int i=lenb;i>=0;i--)
            printf("%d",b[i]);
        return 0;
    }
    int lenc=0,up=0;
    int c[N]={0};
    while(lenc<=lena||lenc<=lenb)
    {
        c[lenc]=a[lenc]+b[lenc]+up;
        up=c[lenc]/10;
        c[lenc]%=10;
        lenc++;
    }
    c[lenc]=up;

    if(c[lenc]==0) lenc--;

    solv(w+1,b,lenb,c,lenc,k);
}

int main()
{
    int n;
    cin>>n;
    num[0]=0,num[1]=1,num[2]=2;
    if(n<=2)
        printf("%llu\n",num[n]);
    else if(n<100)
    {
        for(int i=3;i<=n;i++)
            num[i]=num[i-1]+num[i-2];
        printf("%llu\n",num[n]);
    }
    else {
        int a[N]={0},b[N]={0};
        a[0]=1,b[0]=2;
        solv(3,a,0,b,0,n);

    }
    return 0;
}

by 456laji @ 2020-05-16 19:47:38

我很好奇,为什么我的递归会出现问题呢?


by 老子是北瓜 @ 2020-05-16 19:50:25

还是开全局变量稳一些


by 456laji @ 2020-05-16 20:01:29

@老子是白菜 若是开全局变量稍微不注意一点,会导致数组的内容错乱的。所以我就没有开了。


by 老子是北瓜 @ 2020-05-16 20:17:24

@456laji 确实各有各的长处可是我指针真的一窍不通啊


by SamariumPhosphide @ 2020-05-16 20:20:56

为啥要递归啊/fad


by 456laji @ 2020-05-16 20:24:26

@fürtän 因为这样写,会简单一些,所以就递归了


by SamariumPhosphide @ 2020-05-16 20:30:33

递归会简单一些 i 了 i 了


by Into_qwq @ 2020-05-16 20:38:30

dp多简单


by 456laji @ 2020-05-16 20:41:00

@IamnotTXN 嗯?这题可以用dp嘛,我不会dp


by Into_qwq @ 2020-05-16 20:45:55

@456laji 谔谔,可以啊


| 下一页