题解:P1055 [NOIP2008 普及组] ISBN 号码

· · 题解

题面传送门

用枚举除了最后一位数字之外的数字和,然后模掉

```cpp #include<bits/stdc++.h> using namespace std; int main() { int a,b,c,d,e,f,g,h,i,s1,s2; char j; scanf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%c",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j); s1=(a*1+b*2+c*3+d*4+e*5+f*6+g*7+h*8+i*9)%11; if(j=='X') s2=10; else s2=j-'0'; if(s1==s2) cout<<"Right"; else if(s1==10) cout<<a<<"-"<<b<<c<<d<<"-"<<e<<f<<g<<h<<i<<"-X"; else cout<<a<<"-"<<b<<c<<d<<"-"<<e<<f<<g<<h<<i<<"-"<<s1; return 0; } ``` 也可以这样写 ```cpp #include<bits/stdc++.h> using namespace std; int main() { char s[14]; int a[14],m=0; cin>>s; a[1]=s[0]-'0'; a[2]=s[2]-'0'; a[3]=s[3]-'0'; a[4]=s[4]-'0'; a[5]=s[6]-'0'; a[6]=s[7]-'0'; a[7]=s[8]-'0'; a[8]=s[9]-'0'; a[9]=s[10]-'0'; if(s[12]=='X') a[10]=10; else a[10]=s[12]-'0'; for(int i=1;i<=9;i++) { m+=a[i]*i; } m%=11; if(m==a[10]) cout<<"Right"; else {for(int i=0;i<12;i++) cout<<s[i]; if(m==10) cout<<'X'; else cout<<m; } return 0; } ``` 撒花!!!完美结束!!! ~~这是本蒟蒻第1次写题解,希望管理员大大通过。~~