50分求助!

P1055 [NOIP2008 普及组] ISBN 号码

gsc15759915601 @ 2023-07-10 11:42:58

#include<bits/stdc++.h>
using namespace std;
long long n[11],m = 0,x,y,z;
char s[15];
int main(){
    for(long long i = 1;i<=13;i++){
        cin>>s[i];
    }
    for(long long i = 1;i<=13;i++){
        if(i<2){
            n[i] = s[i]-'0';
        }else if(i>2&&i<6){
            n[i-1] = s[i]-'0';
        }else if(i>6&&i<12){
            n[i-2] = s[i]-'0';
        }else if(i>12){
            x = s[i]-'0';
        }
    }
    for(long long i = 1;i<=9;i++){
        m += n[i]*i;
    }
    m %= 11;
    if(m==x){
        cout<<"Right";
        return 0;
    }
    for(long long i = 1;i<=12;i++){
        cout<<s[i];
    }
    cout<<m;
    return 0;
}

by __Octhyccc__ @ 2023-07-10 12:21:27

@gsc15759915601

ISBN号码最后一位有可能是X,你判断了吗?

不解释了,奉上我的代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    string a;
    cin>>a;//输入
    int s[9];
    int j=0,o=0;
    for(int i=0;i<12;i++){
        if(a[i]!='-'){
            s[j]=a[i]-'0';
            j++;//存每位非'-'的值,之后方便计算。
        }
    }
    for(int i=0;i<9;i++){
        o+=(s[i]*(i+1));//求和
    }
    if(o%11==10 && a[a.length()-1]=='X'){
        cout<<"Right";
    }
    else if(o%11==10 && a[a.length()-1]!='X'){
        for(int i=0;i<12;i++){
            cout<<a[i];
        }
        cout<<'X';
    }
    else if(o%11==a[a.length()-1]-'0'){
        cout<<"Right";
    }
    else{
        for(int i=0;i<12;i++){
            cout<<a[i];
        }
        cout<<o%11;
    }//这些情况需要分类讨论
    return 0;
}

互关一下吧,我先关了,关了私信


by gsc15759915601 @ 2023-07-10 12:40:35

谢谢各位


by gsc15759915601 @ 2023-07-10 12:47:14

代码已改正:

#include<bits/stdc++.h>
using namespace std;
long long n[11],m = 0,x,y,z;
char s[15],str;
int main(){
    for(long long i = 1;i<=13;i++){
        cin>>s[i];
    }
    for(long long i = 1;i<=13;i++){
        if(i<2){
            n[i] = s[i]-'0';
        }else if(i>2&&i<6){
            n[i-1] = s[i]-'0';
        }else if(i>6&&i<12){
            n[i-2] = s[i]-'0';
        }
    }
    for(long long i = 1;i<=9;i++){
        m += n[i]*i;
    }
    m %= 11;
    if(m==10){
        str = 'X';
    }else{
        str = m+'0';
    }
    if(str==s[13]){
        cout<<"Right";
        return 0;
    }
    for(long long i = 1;i<=12;i++){
        cout<<s[i];
    }
    cout<<str;
    return 0;
}

|