求助,悬赏一光

P1055 [NOIP2008 普及组] ISBN 号码

zxbsdkk9468 @ 2023-11-21 16:31:39

样例全过,但是提交全错,```c

include <stdio.h>

int main() { char mcn[100]; int qrt[10],j=0,sum; scanf("%s",mcn); for(int i=0;mcn[i];i++) { if(mcn[i]!='-') { qrt[j]=mcn[i]-'0'; j++; } } for(int i=0;i<9;i++) { for(int j=1;j<10;j++) { sum+=j*qrt[i]; } } if((sum%11)==qrt[9]) printf("Right"); else if((sum%11)==10) { for(int i=0;i<12;i++) printf("%c",mcn[i]); printf("X\n"); } else { for(int i=0;i<12;i++) printf("%c",mcn[i]); printf("%d\n",sum%11); } return 0; }


by FL_sleake @ 2023-11-21 17:00:45

@One_JuRuo 好hack,学到了


by zxbsdkk9468 @ 2023-11-21 17:22:06

@One_JuRuo 题目就是要这样乘啊

#include <stdio.h>
int main()
{
    char mcn[100];
    int qrt[10],j=0,sum;
    scanf("%s",mcn);
    for(int i=0;mcn[i];i++)
    {
        if(mcn[i]!='-')
         {
            qrt[j]=mcn[i]-'0';
            j++;
        }
    }
    for(int i=0;i<9;i++)
    {
        for(int j=1;j<10;j++)
        {
            sum+=j*qrt[i];
        }
    }
    if((sum%11)==qrt[9])
        printf("Right");
    else if((sum%11)==10)
        {
        for(int i=0;i<12;i++)
            printf("%c",mcn[i]);
        printf("X\n");
    }
    else
    {
        for(int i=0;i<12;i++)
            printf("%c",mcn[i]);
            printf("%d\n",sum%11);
    }
    return 0;
}

by One_JuRuo @ 2023-11-21 17:31:11

@zxbsdkk9468

首位数字乘以 1 加上次位数字乘以 2\cdots 以此类推,用所得的结果 \bmod 11,所得的余数即为识别码,如果余数为 10,则识别码为大写字母 X。例如 ISBN 号码 0-670-82162-4 中的识别码 4 是这样得到的:对 0670821629 个数字,从左至右,分别乘以 1,2,\dots,9 再求和,即 0\times 1+6\times 2+……+2\times 9=158,然后取 158 \bmod 11 的结果 4 作为识别码。

而且你样例都没对,你把 sum 输出来,你可以发现你的 sum1441,题目里都告诉你是 158


by zxbsdkk9468 @ 2023-11-21 17:38:36

@One_JuRuo 那我是哪里出错了呢?但是我的输出是正确的


by One_JuRuo @ 2023-11-21 17:40:31

@zxbsdkk9468 你真的确定你的输出是正确的吗,你去测第一个样例。

正确的就是

for(int j=1;j<10;j++)
{
   sum+=j*qrt[j-1];
}


by zxbsdkk9468 @ 2023-11-21 17:49:56

@One_JuRuo 哦哦哦,懂了,但是我第四个测试点还有第七个测试点是错的


by One_JuRuo @ 2023-11-21 17:57:36

@zxbsdkk9468 如果最后一位是 X 呢?你没判断。


by zxbsdkk9468 @ 2023-11-21 18:20:35

@One_JuRuo 大佬,我的输入为6-670-82162-X 但是我的输出为6-670-82162-10 这个我的代码

#include <stdio.h>
int main()
{
    char mcn[100];
    int qrt[10],j=0,sum=0;
    scanf("%s",mcn);
    for(int i=0; mcn[i]; i++)
    {
        if(mcn[i]!='-')
        {
            qrt[j]=mcn[i]-'0';
            j++;
        }
        if(mcn[i]=='X')
            qrt[j]=10;
    }
    for(int j=1; j<10; j++)
    {
        sum+=j*qrt[j-1];
    }
    if(mcn[12]=='X')//判定X的情况
    {
        if((sum%11)==qrt[9])
        {
            printf("Right");
        }
        else
        {
            for(int i=0; i<12; i++)
            {
                printf("%c",mcn[i]);
            }
            printf("%d\n",sum%11);
        }
    }
    else//判定非X的情况
    {
        if((sum%11)==qrt[9])
            printf("Right");
        else if((sum%11)==10)
        {
            for(int i=0; i<12; i++)
                printf("%c",mcn[i]);
            printf("X\n");
        }

        else
        {
            for(int i=0; i<12; i++)
            {
                printf("%c",mcn[i]);
            }
            printf("%d\n",sum%11);
        }
    }

    return 0;
}

能在帮我看看哪里出错了吗


by One_JuRuo @ 2023-11-21 19:20:45

@zxbsdkk9468 你直接特判不就好了


上一页 |