zoukankan      html  css  js  c++  java
  • 团体程序设计天梯赛-练习集L1-016. 查验身份证

    L1-016. 查验身份证

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    陈越

    一个合法的身份证号码由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
    

     思路:只检查前17位是否全为数字且最后1位校验码计算准确

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5 int t;
     6 cin>>t;
     7 int i,j;
     8 int c[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
     9 map<int,char>a;
    10 a[0]='1';
    11 a[1]='0';
    12 a[2]='X';
    13 a[3]='9';a[8]='4';
    14 a[4]='8';a[9]='3';
    15 a[5]='7';a[10]='2';
    16 a[6]='6';
    17 a[7]='5';
    18 bool flag=false;
    19 while(t--)
    20 {
    21   string s;
    22   cin>>s;
    23   int ans=0;
    24   bool tmp=false;
    25   for(i=0;i<17;i++)
    26     {
    27         if(s[i]!='X')
    28       ans+=(s[i]-'0')*c[i];
    29       else
    30        ans+=10*c[i];
    31            ans=ans%11;
    32      }
    33      
    34   if(a[ans]==s[17])continue;
    35   else
    36   {
    37      cout<<s<<endl;
    38       flag=true;
    39   }
    40   
    41 }
    42 if(!flag)
    43 cout<<"All passed
    ";
    44 }
    我会一直在
  • 相关阅读:
    COOKIE和SESSION有什么区别?
    JSP中三大指令
    JSP中out.print()、out.println()以及out.write()的区别
    Linux实战教学笔记06:Linux系统基础优化
    Linux实战教学笔记05:远程SSH连接服务与基本排错(新手扫盲篇)
    Linux实战教学笔记04:Linux命令基础
    Linux实战教学笔记03:操作系统发展历程及系统版本选择
    Linux实战教学笔记02:计算机系统硬件核心知识
    Linux实战教学笔记01:计算机硬件组成与基本原理
    从零开始学Python第八周:网络编程基础(socket)
  • 原文地址:https://www.cnblogs.com/zhien-aa/p/5639710.html
Copyright © 2011-2022 走看看