0
点赞
收藏
分享

微信扫一扫

1031 查验身份证(附详细注释,逻辑分析)


写在前面

  • 实现思路
  • 证件号前17位加权和计算,取模
  • 校验位对比
  • 题目较简单,细节处理耗费时间。例如,校验位下标从0开始
  • 大体10分钟a题,尽量掌握调试(虽至今不太习惯,大多靠猜)

测试用例

input:
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X
output:
12010X198901011234
110108196711301866
37070419881216001X

input:
2
320124198808240056
110108196711301862
output:

ac代码

#include <iostream>
using namespace std;
const int weight[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
const char ch[11] = {'1','0','X','9','8','7','6','5','4','3','2'};
int check_digit(string p)
{
int result = 0;
for(int i=0; i<17; i++) result += (p[i]-'0')*weight[i];
return result%11;
}
int main()
{
int N, check=0, counter=0;
scanf("%d", &N);
char id[18];
for(int i=0; i<N; i++)
{
scanf("%s", id);
check = check_digit(id);
if(ch[check]==id[17]) counter++;
else printf("%s\n", id);
}
if(counter==N) printf("All passed");
return 0;
}

  • 代码优化后

#include <iostream>
using namespace std;
const int weight[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
const char ch[11] = {'1','0','X','9','8','7','6','5','4','3','2'};
bool check_digit(string p)
{
int result = 0;
for(int i=0; i<17; i++) result += (p[i]-'0')*weight[i];
return ch[result%11]==p[17];
}
int main()
{
int N,counter=0;
scanf("%d", &N);
char id[18];
for(int i=0; i<N; i++)
{
scanf("%s", id);
if(check_digit(id)) counter++;
else printf("%s\n", id);
}
if(counter==N) printf("All passed");
return 0;
}

学习代码

  • ​​1031. 查验身份证(15)-PAT乙级真题​​
  • 自定义函数功能更彻底!

#include <iostream>
using namespace std;
int a[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
int b[11] = {1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2};
string s;
bool isTrue() {
int sum = 0;
for (int i = 0; i < 17; i++) {
if (s[i] < '0' || s[i] > '9') return false;
sum += (s[i] - '0') * a[i];
}
int temp = (s[17] == 'X') ? 10 : (s[17] - '0');
return b[sum%11] == temp;
}
int main() {
int n, flag = 0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> s;
if (!isTrue()) {
cout << s << endl;
flag = 1;
}
}
if (flag == 0) cout << "All passed";
return 0;
}


举报

相关推荐

0 条评论