求助,有两个数据点错误,感谢!!!

P1055 [NOIP2008 普及组] ISBN 号码

软骨头鱼 @ 2022-03-22 23:44:18

#include<bits/stdc++.h>
using namespace std;

int main(){

    char a[13];
    for(int i=0;i<13;i++){
        cin>>a[i];
    }
    int h=0,sum=0;
    for(int j=0;j<12;j++){
        if(a[j]!='-'){
            h++;
            sum+=h*(a[j]-'0');
        }
    }

    int sign=sum%11;

    if(sign==(a[12]-48)){
        cout<<"Right";
    }
    else if(sign==10){
        a[12]='X';
        for(int i=0;i<13;i++){
            cout<<a[i];
        }
    }
    else{
        a[12]=sign+48;
        for(int i=0;i<13;i++){
            cout<<a[i];
        }
    }

    return 0;
} 

求助,有两个数据点错误


by Jasper08 @ 2022-03-22 23:47:34

@软骨头鱼

//P1055 ISBN 号码

#include <iostream>

using namespace std;

int main()
{
    int cnt = 0, ans = 0;
    char num[15];
    for (int i = 0; i < 12; ++i)
    {
        cin >> num[i];
        if ('0' <= num[i] && num[i] <= '9') //输入 9个数字 
        {
            cnt += 1;
            ans += cnt * (num[i] - '0');
        }
    }

    char tisbn; //转换最后一位验证码 
    cin >> tisbn;
    int isbn;
    if ('0' <= tisbn && tisbn <= '9')
        isbn = tisbn - '0';
    else //此时验证码为 X,即 10 
        isbn = 10;

    if (ans % 11 == isbn)
        cout << "Right";
    else
    {
        for (int i = 0; i < 12; ++i)
            cout << num[i];
        if (ans % 11 == 10)
            cout << "X";
        else
            cout << ans % 11;
    } 
}

by mengtian_ @ 2022-03-23 08:12:18

其实我也是蒟蒻 \ 根据你的代码改的,注释在代码里有,就是sign=10的时候判断有问题。

#include<bits/stdc++.h>
using namespace std;

int main(){

    char a[13];
    for(int i=0;i<13;i++){
        cin>>a[i];
    }
    int h=0,sum=0;
    for(int j=0;j<12;j++){
        if(a[j]!='-'){
            h++;
            sum+=h*(a[j]-'0');
        }
    }

    int sign=sum%11;
    if(sign==(a[12]-48)){//如果sign=10的话,a[12]-48应该不对了 
        cout<<"Right";
    }
    else if((sign==10&&a[12]=='X')){//所以要再加一条判断10是否等于X 
        cout<<"Right";
    }
    else if(sign==10){
        a[12]='X';
        for(int i=0;i<13;i++){
            cout<<a[i];
        }
    }
    else{
        a[12]=sign+48;
        for(int i=0;i<13;i++){
            cout<<a[i];
        }
    }
    return 0;
} 

|