威尼斯人线上娱乐

视察身份证

15 4月 , 2019  

3个合法的身份证编号由十八个人地区、日期编号和壹一编号加1个人校验码组成。校验码的测算规则如下:

二个合法的身份证编号由二十一人地方、日期编号和一一编号加壹人校验码组成。校验码的乘除规则如下:

题目:

三个官方的身份证号码由十八位所在、日期编号和顺序编号加1人校验码组成。校验码的猜想规则如下:

第二对前13人数字加权求和,权重分配为:{柒,玖,十,五,8,四,二,壹,陆,叁,柒,玖,10,5,捌,四,贰};然后将总结的和对1一取模获得值Z;最终依照以下关系对应Z值与校验码M的值:

Z:0 1 2 3 4 5 6 7 8 9 10M:1 0 X 9 8 7 6 5 4 3 2

于今加以壹些身份证编号,请您验证校验码的管用,并出口有标题标数码。

输入格式:

输入第二行提交正整数N(≤100)是输入的身份证编号的个数。随后N行,每行给出2个17位身份证号码。

输出格式:

服从输入的各样每行输出3个万分的身份证编号。那里并不检查前12个人是不是创制,只检查前1伍人是或不是全为数字且最后一个人校验码总结标准。假设全部号码都不奇怪,则输出All passed

输入样例1:

4

320124198808240056

12010X198901011234

110108196711301866

37070419881216001X

输出样例一:

12010X198901011234

110108196711301866

37070419881216001X

输入样例二:

2

320124198808240056

110108196711301862

出口样例2:

All passed

一个合法的身份证号码由一八个人地区、日期编号和各种编号加一人校验码组成。校验码的乘除规则如下:

第一对前1三位数字加权求和,权重分配为:{7,玖,十,五,8,肆,二,一,6,叁,7,玖,10,五,八,四,二};然后将计算的和对1一取模获得值Z;最终根据以下关系对应Z值与校验码M视察身份证。的值:

率先对前1七个人数字加权求和,权重分配为:{七,玖,10,5,8,四,2,一,陆,三,7,9,十,5,八,肆,贰};然后将计算的和对1①取模获得值Z;最终根据以下关系对应Z值与校验码M的值:

上代码:

吃了今天可怜亏(毕竟用Java怎么也不能够全部AC还拿不到全分太难熬了啊),前些天速成了瞬间C++后早先跟着刷题,前边几道不难点都相当粗略,用C++都一遍通过了,所以就不做笔录了。那道题其实也没怎么好说的,而且小编那个代码即使总体经过了,但也不是最优的。依旧依附柳婼大大的答案吧,然则作者觉着他这一个答案里面能够直接把b[11]给设为字符数组啊,不然还要把X给换到拾

#include <cctype>#include <iostream>using namespace std;bool check(char c[]){    int a[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};    int sum=0;    for(int i=0;i<17;i++)    {        sum+=a[i]*(c[i]-'0');    }    int index=sum%11;    char b[11]={'1','0','X','9','8','7','6','5','4','3','2'};    return b[index]==c[17];}int main(){    int n,flag=0;    cin>>n;    for(int i=0;i<n;i++)    {        int a=0;        char c[18];            cin>>c;        //bool b=check;        for(int j;j<17;j++)        {            if(isalpha            {                cout<<c<<endl;                a=1;flag=1;                break;            }        }        if(a==0)        {            if(!check            {                cout<<c<<endl;                flag=1;            }        }            }    if (flag == 0) cout << "All passed";    return 0;}

本人实在是为了用cctype里面包车型客车is阿尔法()函数来判断是不是有字母(最开始以为这么便于)才硬用字符数组接受的身份证号。其实用string
s接收的话能够如此做:if(s[i]<'0' || s[i]>'9')

(全体AC的觉得最爽了。。。)

先是对前一三人数字加权求和,权重分配为:{7,9,十,伍,八,四,2,一,陆,三,七,九,拾,5,八,四,二};然后将总括的和对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
Z:0 1 2 3 4 5 6 7 8 9 10M:1 0 X 9 8 7 6 5 4 3 2

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

今昔加以1些身份证号码,请你验证校验码的管用,并出口有失水准的号子。

近期加以一些身份证号码,请您验证校验码的实惠,并出口不平日的数码。

今昔加以一些身份证编号,请您验证校验码的可行,并出口有题指标数码。

输入格式:

输入第三行提交正整数N(≤100)是输入的身份证编号的个数。随后N行,每行给出贰个二12人身份证号码。

输入格式:

输入第壹行提交正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出三个17个人身份证编号。

输入格式:

输出格式:

依据输入的各样每行输出3个有标题标身份证编号。那里并不调查前壹6人是还是不是站得住,只检查前1四人是或不是全为数字且最后1位校验码总括标准。假设全体号码都健康,则输出All passed

输出格式:

按部就公输子入的依次每行输出一个有题指标身份证号码。那里并不查看前①三人是不是站得住,只检查前一伍位是不是全为数字且最终壹人校验码计算标准。即使持有号码都健康,则输出All passed

输入第叁行提交正整数N(<=
100)是输入的身份证号码的个数。随后N行,每行给出二个拾七人身份证编号。

输入样例1:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

输入样例一:

432012419880824005612010X19890101123411010819671130186637070419881216001X

输出格式:

出口样例一:

12010X198901011234
110108196711301866
37070419881216001X

出口样例一:

12010X19890101123411010819671130186637070419881216001X

依据输入的一壹每行输出二个有失常态的身份证编号。那里并不查看前拾拾壹位是不是站得住,只检查前贰拾1人是还是不是全为数字且最终1个人校验码总结标准。就算拥有号码都健康,则输出“All
passed”。

输入样例2:

2
320124198808240056
110108196711301862

输入样例贰:

2320124198808240056110108196711301862

输入样例1:

输出样例2:

All passed

认知:第叁回写的提交上去有多个测试的没过。后来在牛客网上的一律的题过了。可想而知牛客网等这个抄
PTA 题的 Online Judge 不确切。

  第3次用的是组织,用结构对 cache
是友善的,可是同样的算法便是没过。结果都是相同的,不用结构用数组居然就过了。进程依旧很主要的!

 1 #include <stdio.h>
 2 
 3 int main(int argc, char const *argv[])
 4 {
 5     int weight[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
 6     char M[] = "10X98765432";
 7 
 8     int n;
 9 
10     scanf("%d", &n);
11 
12     char number[n][19];
13 
14     for ( int i = 0; i < n; i++ ) {
15         scanf("%s", number[i]);
16     }
17 
18     int Allpass = 1;
19     for ( int i = 0; i < n; i++ ) {
20         int sum = 0;
21         for ( int j = 0; j < 17; j++ ) {
22             sum += (number[i][j]-'0') * weight[j];
23         }
24         int over = sum % 11;
25         if ( M[over] != number[i][17] ) {
26             Allpass = 0;
27             printf("%s\n", number[i]);
28         }
29     }
30     if ( Allpass ) {
31         printf("All passed\n");
32     }
33     return 0;
34 }

 

出口样例2:

All passed

威尼斯人线上娱乐,咀嚼:第三回写的提交上去有2个测试的没过。后来在牛客网上的平等的题过了。综上说述牛客网等这一个抄
PTA 题的 Online Judge 不标准。

  第二次用的是构造,用结构对 cache
是温馨的,然则同样的算法即是没过。结果都以同一的,不用结构用数组居然就过了。进程可能很主要的!

 1 #include <stdio.h> 2  3 int main(int argc, char const *argv[]) 4 { 5     int weight[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; 6     char M[] = "10X98765432"; 7  8     int n; 9 10     scanf("%d", &n);11 12     char number[n][19];13 14     for ( int i = 0; i < n; i++ ) {15         scanf("%s", number[i]);16     }17 18     int Allpass = 1;19     for ( int i = 0; i < n; i++ ) {20         int sum = 0;21         for ( int j = 0; j < 17; j++ ) {22             sum += (number[i][j]-'0') * weight[j];23         }24         int over = sum % 11;25         if ( M[over] != number[i][17] ) {26             Allpass = 0;27             printf("%s\n", number[i]);28         }29     }30     if ( Allpass ) {31         printf("All passed\n");32     }33     return 0;34 }
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

输出样例壹:

12010X198901011234
110108196711301866
37070419881216001X

输入样例二:

2
320124198808240056
110108196711301862

出口样例二:

All passed

岁月范围

400 ms

内部存款和储蓄器限制

65536 kB

代码长度限制

8000 B

判题程序

Standard

作者

陈越

 

解题思路:在认清三个身份证编号是不是符合供给时,应该先对前一多少个字符进行判断,假如出现了不是数字的字符,就将它输出。小编这边在认清前一八个字符是或不是数字的时候就早已将前二十个数加权求和了,假若未有出现别的字符,再实行下一步判断,假设不符合需求则输出。这里在认清所有的身份证编号是或不是全部是符合需要的就相比麻烦了,要定义的三个与食指1样的数组,将它伊始化为0,当第i个身份证号码不符合供给时,将数组下标为i的数置为一,假如数组里面全数的数都为0,则能够输出“

All passed

”。

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int i, j;
  int n;
  char s[100][19];
  char m[11] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
  int q[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
  int sum = 0;
  int z, count = 0;
  int flog[100];
  int flog1 = 0;

  for(i = 0; i < 100; i++)
    flog[i] = 0;

  scanf("%d", &n);

  if(n < 0 || n > 100)
  {
    exit(0);
  }

  for(i = 0; i < n; i++)
  {
    scanf("%s", s[i]);
  }

  for(i = 0; i < n; i++)
  {
    sum = 0;
    for(j = 0; j < 17; j++)
    {
      if((int)(s[i][j] - '0') > 9 || (int)(s[i][j] - '0') < 0)//判断是否有除数字外的字符
      {
        flog[i] = 1;
      }
      sum += ((int)(s[i][j]-'0'))*q[j];//将前17个数加权求和
    }
    z = sum % 11;
    if(m[z] != s[i][17])
    {
      flog[i] = 1;
    }
  }

  for(i = 0; i < n; i++)
  {
    if(flog[i] == 1)
      count++;
  }

  for(i = 0; i < n; i++)
  {
    if(flog[i] == 1)
    {
      flog1 = 1;
      printf("%s\n", s[i]);
    }
  }

  if(flog1 == 0)
    printf("All passed\n");

  return 0;
}

 


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图