大佬救救,0分!

P1055 [NOIP2008 普及组] ISBN 号码

TUHAOWENNS @ 2023-07-09 20:32:17

大佬救救,0分!

//c++模板(c++14GCC9)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    char justin,ji,jin,pp;
    char cibsn[10+10];
    int ibsn[9+10];
    int pd,sum=0;

    cin>>cibsn[1];
    cin>>justin;
    for(int i=3;i<=5;i++)
    {
        cin>>cibsn[i];
    }
    cin>>ji;
    for(int i=7;i<=11;i++)
    {
        cin>>cibsn[i];
    }
    cin>>jin;
    cin>>pp;
    if(pp>='0'&&pp<='9') pd=pp-'0';
    else pd=10;
    for(long long i=1;i<=9;i++)
    {
        ibsn[i]=cibsn[i]-'0';
    }
    for(long long i=1;i<=9;i++)

    {
        sum+=ibsn[i]*i;
    }
    sum%=11;
    if(sum==pd)cout<<"Right";
    else 
    {
        cout<<ibsn[1]<<"-";
        for(long long i=2;i<=4 ;i++)

        {
            cout<<ibsn[i];
        }
        cout<<"-";
        for(long long i=5;i<=10 ;i++)
        {
            cout<<ibsn[i];

        }
        cout<<"-";
        cout<<sum;
    }

    return 0;
}

语言是C++ 谢谢


by midsummer_zyl @ 2023-07-09 20:38:08

@LAOLIU888

#include <bits/stdc++.h>
using namespace std;
int main(){
    char a,b,c,d,e,f,g,h,i,j;
    int x;
    scanf("%c-%c%c%c-%c%c%c%c%c-%c",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j);
    x=((int(a)-48)*1+(int(b)-48)*2+(int(c)-48)*3+(int(d)-48)*4+(int(e)-48)*5+(int(f)-48)*6+(int(g)-48)*7+(int(h)-48)*8+(int(i)-48)*9)%11;
    if((x==10)&&(j=='X'))
    {
        printf("Right");
        return 0;
    }
    if((x==10)&&(j!='X'))
    {
        printf("%c-%c%c%c-%c%c%c%c%c-%c",a,b,c,d,e,f,g,h,i,'X');
        return 0;
    }
    if(x==int(j)-48)
    {
        printf("Right");
        return 0;
    }
    else
    {
        printf("%c-%c%c%c-%c%c%c%c%c-%d",a,b,c,d,e,f,g,h,i,x);
        return 0;
    }
    return 0;
}

by chenfeizhou @ 2023-07-09 20:41:09

  1. 输入读取错误:在代码中,你使用了一些字符数组和循环来读取输入的ISBN号码。然而,根据题目描述,ISBN号码的格式是"x-xxx-xxxxx-x",其中符号"-"是分隔符。你应该使用字符类型的变量来逐个读取并处理每个字符,而不是使用字符数组。正确的输入读取方式应该是类似这样的:cin >> justin >> ji >> jin >> pp;

  2. 数字转换错误:在计算识别码时,你将输入的字符转换为数字存储在ibsn数组中。然而,你使用了long long类型的循环索引变量,而实际上这个索引应该是从1到9,超出了数组的有效索引范围。修改循环索引的类型为int并将索引范围改为19

  3. 输出格式错误:在输出结果时,你使用了多余的循环和打印语句来构建输出的ISBN号码。实际上,你只需要按照指定的格式输出正确的ISBN号码即可。可以直接使用cout语句输出正确的ISBN号码。

以下是修改后的代码:

#include <iostream>
using namespace std;

int main()
{
    char justin, ji, jin, pp;
    int ibsn[9];
    int pd, sum = 0;

    cin >> justin >> ji >> jin >> pp;

    if (pp >= '0' && pp <= '9')
        pd = pp - '0';
    else
        pd = 10;

    for (int i = 1; i <= 9; i++)
    {
        cin >> ibsn[i];
        sum += ibsn[i] * i;
    }

    sum %= 11;

    if (sum == pd)
    {
        cout << "Right";
    }
    else
    {
        cout << justin << "-" << ji << jin << "-";
        for (int i = 1; i <= 9; i++)
        {
            cout << ibsn[i];
        }
        cout << "-" << sum;
    }

    return 0;
}

by TUHAOWENNS @ 2023-07-10 13:32:24

@midsummer_zyl @chenfeizhou 谢谢你们的援助


|