立志用更少的代码做更高效的表达


PAT乙级最优题解——>传送门


一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入格式:
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

输出格式:
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。

输入样例1:
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X
输出样例1:
12010X198901011234
110108196711301866
37070419881216001X
输入样例2:
2
320124198808240056
110108196711301862
输出样例2:
All passed


本题核心的考查点在于常量数组的构建。

对于如何将两组数一一映射, 可以采用常量数组的方式, 也就是构建两个数组, 利用数组角标和数组值的关系映射两组数。

当然 用map容器也是可以的, 不过常量数组要简便一些。


代码展示

#include<bits/stdc++.h>
using namespace std;
int flag1[18] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char flag2[11] = {'1','0','X','9','8','7','6','5','4','3','2'};
int main() {int n; cin>>n; int T = n;for(int i = 0; i < n; i++) {string s; cin>>s;bool flag = false;int len = s.length();int num = 0;for(int i = 0; i < len-1; i++) {num += (s[i]-'0')*flag1[i];if(s[i] < '0' || s[i] > '9') flag = true; }if(flag2[num%11] != s[len-1])  flag = true;if(flag == true) { cout << s << '\n'; T--; } }if(T == n) cout << "All passed" << '\n';return 0;
}

每日一句

永远相信美好的事情即将发生❥(^-^)

1031 查验身份证 (15分)_21行满分代码相关推荐

  1. C++学习之路 | PTA乙级—— 1031 查验身份证 (15 分)(精简)

    1031 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2 ...

  2. PAT乙级 1031 查验身份证 (15 分)

    1031 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2 ...

  3. 【2020模拟考试T1】【PAT乙】1031 查验身份证 (15分)模拟

    problem 1031 查验身份证 (15分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10, ...

  4. PAT 乙级 1031 查验身份证 (15分)

    1031 查验身份证 (15分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2, ...

  5. 1031 查验身份证 (15 分)

    1031 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2 ...

  6. 1031 查验身份证(15)(15 分)

    1031 查验身份证(15)(15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8, ...

  7. 查验身份证python_PAT 1031 查验身份证(15)(C++Python)

    1031 查验身份证(15)(15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8, ...

  8. 乙级--1031 查验身份证 (15分)(中等)

    题目描述:(15) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7 ...

  9. 1031 查验身份证 (15 分) python

    一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8, ...

最新文章

  1. Java高并发编程(十二):Executor框架
  2. centos 上 crontab 计划任务 ,这个版本解释的比较清晰
  3. JavaScript的作用域与闭包
  4. MyLinkedList
  5. 判断网页是否为微信内置浏览器打开?
  6. docker知识总结
  7. Python练习:平方值格式化
  8. H3C MSTP实验
  9. 医疗软件测试工作流程
  10. CAD2008详细安装教程和激活失败方法
  11. sola病毒批量恢复工具 —— 大一的回忆
  12. FreeCAD源码分析:TechDraw模块
  13. SHT30温湿度传感器工作原理
  14. Web前端工程师职业方向定位
  15. 4步讲解一维数组传参与二维数组传参
  16. 关于软件测试的英语面试题,软件测试工程师英语面试题
  17. word无法自动修复计算机怎么办,电脑Word问题解决办法
  18. Redis Desktop Manager 黑屏
  19. Linux服务器卡顿如何排查
  20. 大数据入门:Scala大数据黄金语言

热门文章

  1. TCP的拥塞控制--慢启动,拥塞避免,快重传,快速恢复
  2. 技术转管理的“苦”,我懂......
  3. 面试官:GET和POST两种基本请求方法有什么区别
  4. [五]RabbitMQ-客户端源码之AMQChannel
  5. Java虚拟机类加载机制——案例分析
  6. []int 能转换为 []interface 吗?
  7. 写一个 panic blame 机器人
  8. VVC专利池最新进展:MC-IF正在召集专利拥有者
  9. 范醒哲:5G时代是时候全面解决TCP的效率问题了
  10. JVM之盘点家底查看初始默认值和更改值