我想不通了,一道简单的题目做了半年才50分......

P1055 [NOIP2008 普及组] ISBN 号码

zhonghongye @ 2023-08-26 19:40:56

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string a;
    int s=0,n1,n2,b,k=1;
    cin>>a;
    for(int i=0;i<12;i++)
    {
        if(a[i]=='-')
            continue;
        else
        {
            b=a[i]-'0';
            s=s+b*k;
            k++;
        }
    }
    n1=a[12]-'0';
    n2=s%11;
    if(n1==n2)
    cout<<"Right";
    else
    {
        for(int i=0;i<12;i++)
        cout<<a[i];
        cout<<n2;
    }
    return 0;
}

by OIerWu_829 @ 2023-08-26 19:42:13

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

int main()
{
    char a[100];
    scanf("%c-%c%c%c-%c%c%c%c%c-%c", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8], &a[9]);
    int sum = 0,remainder;
    char ch;
    for (int i = 0; i < 9; i++)
    {
        sum += (a[i] - '0') * (i + 1);
    }
    remainder = sum % 11;
    if (remainder == 10) ch = 'X';
    else ch = remainder + '0';
    if (ch == a[9]) printf("Right\n");
    else
        printf("%c-%c%c%c-%c%c%c%c%c-%c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], ch);
    return 0;
}

仅供参考

不要脸的求个关


by clarkwang @ 2023-08-26 19:50:12

如果你真是每天做,建议换道题或者参考题解

如果不是,建议你每天做8小时(


by tyr_04 @ 2023-08-26 19:56:34

@zhonghongye 你忘了一个地方,当余数为10时,识别码位X

AC代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string a;
    int s=0,n1,n2,b,k=1;
    cin>>a;
    for(int i=0;i<12;i++)
    {
        if(a[i]=='-')
            continue;
        else
        {
            b=a[i]-'0';
            s=s+b*k;
            k++;
        }
    }
    n1=a[12]-'0';
    n2=s%11;
    if(n1==n2||(n2==10&&a[12]=='X'))//新增一个余数为10的特判,此时a[12]应该等于X
    cout<<"Right";
    else
    {
        for(int i=0;i<12;i++)
        cout<<a[i];
        if(n2==10)//特判
        {
            cout<<'X';
        }
        else
        {
           cout<<n2;
        }
    }
    return 0;
}

by tyr_04 @ 2023-08-26 19:57:26

@zhonghongye 所以以后要认真读题啊,顺便求个关注QAQ


by zcy_jake @ 2023-08-27 09:36:31

@zhonghongye

我的最简单易懂,且最短!

#include<bits/stdc++.h>
using namespace std;
string a;
int sum,k,ans;
char ansc;
int main() {
    cin>>a;
    for(int i=0;i<a.size()-2;i++){
        if(a[i]!='-'){
            k++;
            sum+=(a[i]-'0')*k;
        }
    }
    sum%=11;
    if(sum==10)ansc='X';
    else ansc=sum+'0';
    if(a[12]==ansc)cout<<"Right"<<endl;
    else{
        for(int i=0;i<a.size()-1;i++)cout<<a[i];
        cout<<ansc<<endl;
    }
}

求关(QWQ)


by tyr_04 @ 2023-08-27 14:05:23

@zcy_jake 但你用的是你自己的代码,我是用他的代码调试的


by hang2023 @ 2023-09-02 14:58:22

要考虑有 X 的情况。


by zhonghongye @ 2023-09-03 19:40:55

谢谢奥!


|