为什么过不了样例

P1055 [NOIP2008 普及组] ISBN 号码

Miracle_InDream @ 2023-10-28 22:23:28

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string a,c="";
    cin>>a;
    int l=0,l1=a.length();
    for(int i=0;i<a.length();i++)
    {
        if(a[i]!='-')
        {
            c+=a[i];
        }
        l++;
    }
    int b[l];
    int ans=0;
    for(int i=0;i<l;i++)
    {
        b[i]=c[i]-48;
        b[i]=b[i]*i+1;
        ans+=b[i];
    }
    if(a[l1-1]-48==ans%11)
    {
        cout<<"Right";
    }
    else if(a[l1-1]-48=='X'&&ans%11==10)
    {
        cout<<"Right";
    }
    else
    {
        cout<<a;
        cout<<'\b';
        if(ans%11!=10)
        {
            cout<<ans%11; 
        }
        else
        {
            cout<<'X';
        }
    }
    return 0;
}

by Ace_FutureDream @ 2023-10-29 07:18:47

@shooting__star

给个建议,样例不过自己手动模拟下,不要以不会就发帖,发完贴别人给你解答都是别人的,不是你的,手动模拟电脑运行样例不就好了?你别告诉我你这都不会......还有你的码风很清奇......

AC:

#include<bits/stdc++.h>
using namespace std;
int b[20];//你这不怕编译出错?还有为啥不定义在外面...... 
int main()
{
    string a,c="";
    cin>>a;
    int l=0,l1=a.length();
    for(int i=0;i<a.length()-1;i++)//你为什么不替换为l1?还有最后一位不能识别进c里面 
    {
        if(a[i]!='-')
        {
            c+=a[i];
            l++;//l肯定是加在里面的啊 
        }

    }
    int ans=0;
    for(int i=0;i<l;i++)
    {
        b[i]=c[i]-'0';//减0不就好了,不用去记编码的,还容易错         
        b[i]=b[i]*(i+1);
        ans+=b[i];
    }
    if(a[l1-1]-'0'==ans%11) 
    {
        cout<<"Right";
    }
    else if(a[l1-1]=='X'&&ans%11==10)//这里不用-48,因为他本身就是X你还减会对就怪了 
    {
        cout<<"Right";
    }
    else
    {
        for(int i=0;i<l1-1;i++){
            cout<<a[i]; 
        }
        //你输出制表符干嘛? 
        if(ans%11!=10)
        {
            cout<<ans%11; 
        }
        else
        {
            cout<<'X';
        }
    }
    return 0;
}

|