照题目意思模拟即可
两种通不过的情况:
1.前17位出现不合法字符,遇到后直接退出
2.前十七位加和对11取模后的值与表中不符
一个小细节
以上两种情况不能用if并列,而是if(有不合法字符)......else{if(取模后的值不相等)}否则测试点2答案错误
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int q[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char m[11]={'1','0','X','9','8','7','6','5','4','3','2'};
int main()
{
int n,i,j,z;
cin>>n;
char s[101];
int sum=0;
int flag=1;
for(i=0;i<n;i++)
{
scanf("%s",s);
for(j=0;j<17;j++)
{
if(!(s[j]>='0'&&s[j]<='9')) break;
sum+=(s[j]-'0')*q[j];
}
z=sum%11;
sum=0;
if(j<17)
{
flag=0;
printf("%s\n",s);
}
else
{
if(m[z]!=s[17])
{
flag=0;
printf("%s\n",s)
}
}
}
if(flag==1) cout<<"All passed";
return 0;
}