0分求助,给的例子自己试的全过,输入输出格式正确

P1055 [NOIP2008 普及组] ISBN 号码

lanyaohhh @ 2023-10-29 11:41:23

#include<iostream>
using namespace std;
int main ()
{
    char a[13];int b,s,e,c;
    for(int i=0;i<13;i++) cin>>a[i];
    for(int i=0;i<13;i++)
    {
        if(a[i]!='-')
        {
            int b=a[i];b-=48;
            s=s+b*e;
            e++;
        }
        if(i==12&&a[12]!='X') 
        {
            int c=a[i];c-=48;
        }
        if(i==12&&a[12]=='X')
        {
            int c=10;
        } 
    }
    e=s%11;
    if(e==c) cout<<"Right"<<endl;
    else 
    {
        for (int i=0;i<12;i++) cout<<a[i];
        if(e!=10) cout<<e<<endl;
        else cout<<'X'<<endl;
    }
    return 0;
}

by zhang_feng_rui @ 2023-10-29 12:15:35

不知道你样例是怎么过的,可能是凑巧吧

先说最重要的问题:s在计算时会把最后一个数也加进去

解决方法:s加的时候再加个判断就行

if(a[i]!='-'&&i!=12)
{
    b=a[i];b-=48;
    s=s+b*e;
    e++;
}

其他问题:e变量是从1开始乘的,s的初始值也要设一下

char a[13];int b,s=0,e=1,c;

问题就这些,改完即可AC

#include<iostream>
using namespace std;
int main ()
{
    char a[13];int b,s=0,e=1,c;
    for(int i=0;i<13;i++) cin>>a[i];
    for(int i=0;i<13;i++)
    {
        if(a[i]!='-'&&i!=12)
        {
            b=a[i];b-=48;
            s=s+b*e;
            e++;
        }
        if(i==12&&a[12]!='X') 
        {
            c=a[i];c-=48;
        }
        if(i==12&&a[12]=='X')
        {
            c=10;
        } 
    }
    e=s%11;
    if(e==c) cout<<"Right"<<endl;
    else 
    {
        for (int i=0;i<12;i++) cout<<a[i];
        if(e!=10) cout<<e<<endl;
        else cout<<'X'<<endl;
    }
    return 0;
}

我也蒟蒻,说错请改正


by lanyaohhh @ 2023-10-29 22:04:53

@zhang_feng_rui

我蒟蒻的哎

if(a[i]!='-')
{
    int b=a[i];b-=48;
    s=s+b*e;
    e++;
}
if(i==12&&a[12]!='X') 
{
    int c=a[i];c-=48;
}
if(i==12&&a[12]=='X')
{
    int c=10;
} 

为啥要去掉里面的几个:

"int"

答:不去有错的


|