10分WA求调(悬2关!)

P1255 数楼梯

Chinese_Dragon @ 2023-10-07 17:23:40

除#6外全无输出!help!

#include<bits/stdc++.h>
using namespace std;
string x,y,m;
int a[10000],b[100000],ans[100000],c;
string high_plus(string x,string y);
int main()
{
    int n;
    x=y="1";
    cin>>n;
    for (int i=1;i<=n-2;i++)
    {
        high_plus(x,y);
        x=y;
        y=m;
    }
    cout<<y;
    return 0;
}
string high_plus(string x,string y)
{
    for (int i=x.size()-1;i>=0;i--)
    {
        a[x.size()-i]=x[i]-'0';
    }
    for (int i=y.size()-1;i>=0;i--)
    {
        b[y.size()-i]=y[i]-'0';
    }
    for (int i=1;i<=max(x.size(),y.size());i++)
    {
        ans[i]=a[i]+b[i]+c;
        c=0;
        if (ans[i]>=10)
        {
            c=1;
            ans[i]%=10;
        }
    }
    if (c!=0)
    {
        ans[max(x.size(),y.size())+1]=c;
        for (int i=max(x.size(),y.size())+1;i>=1;i--)
        {
            m[max(x.size(),y.size())+1-i]=char(ans[i]+'0');
        }
    }
    else
    {
        for (int i=max(x.size(),y.size());i>=1;i--)
        {
            m[max(x.size(),y.size())-i]=char(ans[i]+'0');
        }
    }
    return m;
}

by Chinese_Dragon @ 2023-10-07 17:31:25

搞错了……

#include<bits/stdc++.h>
using namespace std;
string x,y,t,m;
int a[10000],b[100000],ans[100000];
int c;
string high_plus(string x,string y){
    m="";
    for (int i=x.size()-1;i>=0;i--)
    {
        a[x.size()-i]=x[i]-'0';
    }
    for (int i=y.size()-1;i>=0;i--)
    {
        b[y.size()-i]=y[i]-'0';
    }
    for (int i=1;i<=max(x.size(),y.size());i++)
    {
        ans[i]=a[i]+b[i]+c;
        c=0;
        if (ans[i]>=10)
        {
            c=1;
            ans[i]%=10;
        }
    }
    if (c!=0)
    {
        ans[max(x.size(),y.size())+1]=c;
        for (int i=max(x.size(),y.size())+1;i>=1;i--)
        {
            m[max(x.size(),y.size())+1-i]=char(ans[i]+'0');
        }
    }
    else
    {
        for (int i=max(x.size(),y.size());i>=1;i--)
        {
            m[max(x.size(),y.size())-i]=char(ans[i]+'0');
        }
    }
    return m;
}
int main()
{
    int n;
    x=y="1";
    cin>>n;
    for (int i=1;i<=n-2;i++)
    {
        t=x;
        x=y;
        y=high_plus(t,y);
    }
    cout<<y;
    return 0;
}

by Plenilune_Dreamer @ 2023-10-07 17:39:59

@kunkun_666 可以用递归和二维数组啊!!!


by Plenilune_Dreamer @ 2023-10-07 17:42:00

@ kunkun_666 你看一看这个

建议换一个方法


#include<bits/stdc++.h>

using namespace std;
int a[5000],b[5000],c[5000];
int n,x=1;

void gj()
{
    for(int i=3;i<=n;i++)
    {
        for(int j=1;j<=x;j++)
            c[j]=a[j]+b[j];
        for(int j=1;j<=x;j++)
        {
            if(c[j]>9)
            {
                c[j+1]=c[j+1]+c[j]/10;c[j]%=10;
                if(j+1>x)
                    x++;
            }
        }
        for(int j=1;j<=x;j++)
            a[j]=b[j];
        for(int j=1;j<=x;j++)
            b[j]=c[j];
    }
    for(int i=x;i>0;i--)
        cout<<b[i];
}
int main()
{
    cin>>n;
    if(n<3)
    {
        cout<<n;
        return 0;
    }
    memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));
    a[1]=1;b[1]=2;
    gj();
    return 0;
}

所以就是换个方法


by Plenilune_Dreamer @ 2023-10-07 17:47:03

这个是按题解改的

其实就是题解


by Plenilune_Dreamer @ 2023-10-07 17:48:41

真正提交的不是这个


by Plenilune_Dreamer @ 2023-10-07 17:52:36

@kunkun_666

这个也可以看一看

(其实这两个都是别人的,但你可以借鉴一下)


#include <stdio.h>
int a[100000]={1,0},b[100000]={0,},c[100000];
int i,n=1,j,flat,k;
int main()
{
    scanf("%d",&k);
    for(j=1;j<=k;j++)
    {
        for(i=0,flat=0;i<n;i++)
        {
            c[i]=a[i]+b[i]+flat;
            flat=0

            if(c[n-1]>=10){
                n++;
            }
            flat=c[i]/10;
            c[i]=c[i]%10;
        for(i=0;i<n;i++){
            b[i]=a[i];
        }
        for(i=0;i<n;i++){
            a[i]=c[i];
        }

    }
    for(i=n-1;i>=0;i--){
        printf("%d",c[i]);
    }
    printf("\n");
    return 0;
}

by Timmy_ @ 2023-10-07 21:07:10

过了

#include<bits/stdc++.h>
using namespace std;
string x,y,t,m;
int a[10000],b[100000],ans[100000];
int c;
string high_plus(string x,string y){
    m="";
    for (int i=x.size()-1;i>=0;i--)
    {
        a[x.size()-i]=x[i]-'0';
    }
    for (int i=y.size()-1;i>=0;i--)
    {
        b[y.size()-i]=y[i]-'0';
    }
    c=0;
    for (int i=1;i<=max(x.size(),y.size());i++)
    {
        ans[i]=a[i]+b[i]+c;
        c=0;
        if (ans[i]>=10)
        {
            c=1;
            ans[i]%=10;
        }
    }
    if (c!=0)
    {
        ans[max(x.size(),y.size())+1]=c;
        for (int i=max(x.size(),y.size())+1;i>=1;i--)
        {
            m+=char(ans[i]+'0');
        }
    }
    else
    {
        for (int i=max(x.size(),y.size());i>=1;i--)
        {
            m+=char(ans[i]+'0');
        }
    }
    return m;
}
int main()
{
    int n;
    x="1",y="2";
    cin>>n;
    if(n==1)
    {
        cout<<n;
        return 0;
    }
    for (int i=1;i<=n-2;i++)
    {
        t=x;
        x=y;
        y=high_plus(t,y);
    }
    cout<<y;
    return 0;
}

by Timmy_ @ 2023-10-07 21:11:25

调完了,一共有这么几个问题。

第一个,刚开始记得把 c 初始化为0,否则会出问题(因为之前用过c)

第二个,string你是不能直接在下标下幅值的,可用a+=b的形势把b这个字符串插到a的末尾

第三个 x y 的初始值分别是1和2,不是1 和 1,自己仔细想想

第四个,对 n=1的情况要特判,因为你的循环是从 1~n-2 的


by Chinese_Dragon @ 2023-10-07 21:14:26

@WM_Timmy @Hangefei1114 已AC,谢各位大佬(已关)


by Chinese_Dragon @ 2023-10-07 21:17:33

此贴结


| 下一页