Chinami_Nagisa @ 2024-01-09 13:32:17
#include <iostream>
#define maxn 12
#define m 11
using namespace std;
int main(){
int i=1,n=0,x;
char s[114],c;
while((s[n++]=getchar())!='\n');
for(n=0;n<maxn;n++)
{
if(n!=1&&n!=5&&n!=11)
{
x+=(s[n]-'0')*i;
i++;
}
}
x%=m;
if(x!=10)
{
if(s[maxn]-'0'==x)
cout<<"Right";
else
{
s[maxn]=x+'0';
for(n=0;n<=maxn;n++)
putchar(s[n]);
}
}
else
{
if(s[maxn]=='X')
cout<<"Right";
else
{
s[maxn]='X';
for(n=0;n<=maxn;n++)
putchar(s[n]);
}
}
return 0;
}
by lizhengfei0824 @ 2024-01-09 13:41:18
很简单如下:
#include<bits/stdc++.h>
using namespace std;
char s[20];
int main()
{
int ans;
scanf("%s",s);
ans=(s[0]-'0')*1+(s[2]-'0')*2+(s[3]-'0')*3+(s[4]-'0')*4+(s[6]-'0')*5+(s[7]-'0')*6+(s[8]-'0')*7+(s[9]-'0')*8+(s[10]-'0')*9;
ans=ans%11;
if(ans==10)
{
if(s[12]=='X')
{
printf("Right\n");
}
else
{
s[12]='X';
printf("%s\n",s);
}
}
else if(ans==s[12]-'0')
{
printf("Right\n");
}
else
{
s[12]=ans+'0';
printf("%s\n",s);
}
return 0;
}
by forever_nope @ 2024-01-09 14:44:43
main
函数第一行:int i=1,n=0,x;
x
需要赋值,改为:int i=1,n=0,x=0;
因为 x
没有赋值,直接进行运算,是 UB。
by Chinami_Nagisa @ 2024-01-10 13:04:39
@RainPPR 谢谢大佬,已修改,但问题还是没有解决。 调试的过程中没有出现任何问题,查了一下也并没有什么数组越界的情况,就一直报错,折腾很长时间了
by forever_nope @ 2024-01-10 14:01:08
@Chinami_Nagisa 即答:输入方式不对。
根本原因是本题输入格式中,最后一行不是换行。
因此你写的 getchar()
什么什么的 !='\n'
就不对了。
可以加一个 !=EOF
,或者建议使用 scanf
或者 cin
输入。
我实测仅将第 8 行替换为 scanf("%s",s);
就可以 AC。
https://www.luogu.com.cn/record/142416205。
by forever_nope @ 2024-01-10 14:02:01
@Chinami_Nagisa 有一个方法。
善用 Codeforces 的 Custom test 的 Clang 语言()
特别好用。在找 RE 的时候()
https://codeforces.com/problemset/customtest