方法一:
#include<cstdio>
#include<cstring>
int main()
{
int g[17] = { 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 n;
char str[20];
bool flag=true;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
int sum=0;
scanf("%s", str);
int j;
for (j = 0; j < 17; j++)
{
if (!(str[j] >= '0' && str[j] <= '9')) break;
else sum = sum + (str[j] - '0')*g[j];
}
if (j < 17)
{
flag = false;
printf("%s\n", str);
}
else
{
if ( str[17]!=m[sum % 11] )
{
flag = false;
printf("%s\n", str);
}
}
}
if (flag == true) printf("All passed\n");
return 0;
}
方法二:
#include<cstdio>
#include<cstring>
int main()
{
char s[11] = { '1','0','X','9','8','7','6','5','4','3','2' };
int n;
char str[20];
int g[17] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };
bool flag1 = true, flag2 = true;
int count = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
int sum = 0;
scanf("%s", str);
for (int k = 0; k < 17; k++)
{
sum = sum + g[k] * (str[k] - '0');
}
if (str[17] == s[sum % 11]) flag2 = true;
else flag2 = false;
for (int j = 0; j < 17; j++)
{
if (str[j] >= '0' && str[j] <= '9') flag1 = true;
else
{
flag1 = false;
break;
}
}
if (flag1 == false || flag2 == false)
{
printf("%s\n", str);
count++;
}
}
if (count == 0) printf("All passed\n");
return 0;
}
这道题目因为我把sum定义到了第一个for循环的外面,而导致一直ac不了 真的看了好久都没发现这个弱智的小错误
第二种方法是一开始自己想的,利用两个布尔变量来确定最后的结果,第一个方法是看别人解法学到的,只用一个变量就能实现