zxbsdkk9468 @ 2023-11-21 16:31:39
样例全过,但是提交全错,```c
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 是这样得到的:对067082162
这9 个数字,从左至右,分别乘以1,2,\dots,9 再求和,即0\times 1+6\times 2+……+2\times 9=158 ,然后取158 \bmod 11 的结果4 作为识别码。
而且你样例都没对,你把
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 你直接特判不就好了