那些年的那些**错误

这里是一个总结,也可以是大家的提醒

而且,我才不会告诉你是哪题呢

各路大佬有什么避免这些错误的方法可以在下面评论!!!

不该犯的

变量名写错

double ans=0x7ffffff;
void DFS(double now,int num,int sum)
{
    if(sum==n){
        ans=min(ans,now);
        return ;
    }
    if(now>sum)
        return ;
    ...
}

看到错误了吗?

没有?咦?为什么nowsum比较呀?

int为什么与double比较呢?

正确代码:

    if(now>ans)
        return ;

DP结果输出错误

    for(i=0;i<=g[1];i++)
        for(j=0;j<=g[2];j++)
            for(k=0;k<=g[3];k++)
                for(l=0;l<=g[4];l++){
                    int move=1+i+2*j+3*k+4*l;
                    if(i!=0) f[i][j][k][l]=max(f[i][j][k][l],f[i-1][j][k][l]+a[move]);
                    if(j!=0) f[i][j][k][l]=max(f[i][j][k][l],f[i][j-1][k][l]+a[move]);
                    if(k!=0) f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k-1][l]+a[move]);
                    if(l!=0) f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k][l-1]+a[move]);
                }
    cout<<f[g[i]][g[2]][g[3]][g[4]]<<endl;
    return 0;

这个错误太明显了,但是我依然调了半个上午……

好吧,我知道你看出来了,我输出了一个神奇的变量:f[g[i]][g[2]][g[3]][g[4]]!!!

正确写法:

    cout<<f[g[1]][g[2]][g[3]][g[4]]<<endl;
    return 0;

少写一条语句

string ans="";
void zk(int n)
{
    if(s[n-1]>=s[n+1]){
        ans+=s[n];
        return ;
    }
    if(s[n+1]-1==s[n-1])
        return ;
    string an="";
    int i,j;
    for(i=s[n-1]+1;i<=s[n+1]-1;i++)
        for(j=1;j<=p2;j++){
            if(p1==1)
                an+=(char)i;
            else if(p1==2)
                an+=(char)(i-32);
            else
                an+='*';
        }
    if(p3==2)
        reverse(an.begin(),an.end());
    ans+=an;
}
void sk(int n)
{
    if(s[n-1]>=s[n+1]){
        ans+=s[n];
        return ;
    }
    if(s[n+1]-1==s[n-1])
        return ;
    string an="";
    int i,j;
    for(i=s[n-1]+1;i<=s[n+1]-1;i++)
        for(j=1;j<=p2;j++){
            if(p1==3)
                an+='*';
            else
                an+=(char)i;
        }
    if(p3==2)
        reverse(an.begin(),an.end());
}

这是一条简单的错误,我用了一个小时把他找出来了

没错,这两个函数特别对称,所以,所以…所以……

sk函数里好像少了一句话?

补上她,顺利AC

void sk(int n)
{
    if(s[n-1]>=s[n+1]){
        ans+=s[n];
        return ;
    }
    if(s[n+1]-1==s[n-1])
        return ;
    string an="";
    int i,j;
    for(i=s[n-1]+1;i<=s[n+1]-1;i++)
        for(j=1;j<=p2;j++){
            if(p1==3)
                an+='*';
            else
                an+=(char)i;
        }
    if(p3==2)
        reverse(an.begin(),an.end());
    ans+=an;
}
posted @ 2020-01-15 10:00  Garbage-Only-One  阅读(207)  评论(0编辑  收藏  举报