救命啊,几个测试点不过WA

P1055 [NOIP2008 普及组] ISBN 号码

DoubleCats @ 2023-11-10 22:24:12

#include<bits/stdc++.h>
using namespace std;
int tt[114514],lst,sum;
char s1[114154];
int main(){
    for(int i=1;i<=13;i++){
        char a;
        cin>>a;
        s1[i]=a;
        if(a=='-') tt[i]=0;
        else if(a=='X') tt[i]=11;
        else tt[i]=a-'0'+1;
    }
    //求和
    {
        int ttt=0;
        for(int i=1;i<=9;i++){
            //首位数字乘以 1加上次位数字乘以 2 ……

            if(tt[i]==0){//当tt[i]是0("-")时 ttt++;
                ttt++;
            } 

            sum=sum+(tt[i+ttt])*i;
        }
    }

    //计算识别码
    lst=sum%11;
    if(lst==tt[13]-1) cout<<"Right";

    else{
        for(int i=1;i<=12;i++){
            if(tt[i]==0) cout<<"-";
            else if(tt[i]==10) ;
            else cout<<tt[i]-1;
        }
        if(lst==10) cout<<"X";
        else cout<<lst;
    } 
//  if(sum==10) cout<<"X";
//  else cout<<sum;

    return 0;
}

代码如上 输入:7-115-13880-4 输出:7-115-13880-1 应输出:7-115-13880-X 一晚上了啊啊,帮帮孩子吧 QWQ


by Azzero @ 2023-12-01 11:31:40

为啥存数字的数组,每一位都要加1,后面输出的时候还要减1.


by ltzx2022_kanxinyi_5 @ 2023-12-01 15:44:30

@Doubles_Cats 搞复杂了,可以参考代码

#include <bits/stdc++.h> 
using namespace std;
string s;
char c;
int a,b; 
int main(){
    cin>>s;
    for(int i=0;i<11;i++)
        if(s[i]!='-')//判断是不是数字 
            b++,a+=b*(s[i]-'0');//转成普通数字 
    a%=11;
    if(a==10) c='X';
    else c=a+'0';//转回来 
    if(c==s[12]) cout<<"Right";
    else{
        s[12]=c;
        cout<<s;
    }
    return 0;
}

一份简简单单的代码,如果你AC了,那就给个关注吧


|