稽查身份证

稽查身份证。贰个合法的身份证号码由壹陆位地区、日期编号和各种编号加1人校验码组成。校验码的总计规则如下:

一个法定的身份证号码由1几人地区、日期编号和种种编号加1个人校验码组成。校验码的总结规则如下:

题目:

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

先是对前二10个人数字加权求和,权重分配为:{7,九,10,5,8,肆,2,一,陆,三,7,九,十,五,八,4,贰};然后将总计的和对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

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

输入格式:

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

输出格式:

按部就鲁班入的逐一每行输出三个有题指标身份证号码。那里并不查看前二10人是还是不是站得住,只检查前一伍个人是不是全为数字且最后1个人校验码总计标准。如若持有号码都健康,则输出All passed

输入样例一:

4

320124198808240056

12010X198901011234

110108196711301866

37070419881216001X

出口样例一:

12010X198901011234

110108196711301866

37070419881216001X

输入样例贰:

2

320124198808240056

110108196711301862

输出样例2:

All passed

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

先是对前十三位数字加权求和,权重分配为:{7,9,十,伍,8,四,二,一,6,3,7,玖,拾,五,八,4,二};然后将总计的和对1一取模获得值Z;最后依据以下关系对应Z值与校验码M的值:

第一对前1四个人数字加权求和,权重分配为:{柒,玖,10,5,八,四,二,1,六,3,七,九,拾,伍,捌,四,二};然后将总计的和对1壹取模获得值Z;最后依照以下关系对应Z值与校验码M的值:

上代码:

吃了今日分外亏(究竟用Java怎么也不能够一切AC还拿不到全分太难熬了哟),明日速成了瞬间C++后初阶接着刷题,前面几道简单题都很不难,用C++都三回通过了,所以就不做记录了。这道题其实也没怎么好说的,而且本人那么些代码即使全部透过了,但也不是最优的。依旧依附柳婼大大的答案吧,然而自身认为她这一个答案里面能够一贯把b[11]给设为字符数组啊,不然还要把X给换来10

#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的觉得最爽了。。。)

先是对前二10人数字加权求和,权重分配为:{7,九,拾,5,八,四,二,一,陆,三,柒,玖,十,5,8,四,二};然后将总结的和对1一取模获得值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些身份证号码,请你验证校验码的实用,并出口有失水准的号子。

当今加以1些身份证号码,请您验证校验码的可行,并出口格外的数码。

输入格式:

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

输入格式:

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

输入格式:

输出格式:

按部就公输盘入的次第每行输出一个有标题标身份证号码。那里并不检查前一三人是或不是创制,只检查前二十一位是还是不是全为数字且最后一位校验码总计标准。固然拥有号码都平常,则输出All passed

出口格式:

按部就公输盘入的相继每行输出二个有毛病的身份证号码。那里并不调查前拾八个人是还是不是站得住,只检查前一六个人是还是不是全为数字且倒数一位校验码计算标准。借使具有号码都健康,则输出All passed

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

输入样例一:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

输入样例一:

432012419880824005612010X19890101123411010819671130186637070419881216001X

出口格式:

输出样例壹:

12010X198901011234
110108196711301866
37070419881216001X

输出样例一:

12010X19890101123411010819671130186637070419881216001X

按部就鲁班入的依次每行输出一个有题指标身份证号码。这里并不调查前13人是或不是成立,只检查前1六个人是不是全为数字且最终壹人校验码计算标准。借使持有号码都平常,则输出“All
passed”。

输入样例二:

2
320124198808240056
110108196711301862

输入样例2:

2320124198808240056110108196711301862

输入样例一:

美高梅开户网址 ,输出样例2:

All passed

认知:第一次写的交由上去有五个测试的没过。后来在牛客网上的1样的题过了。总之牛客网等那个抄
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 }

 

出口样例二:

All passed

咀嚼:第三回写的交由上去有1个测试的没过。后来在牛客网上的等同的题过了。不问可见牛客网等这么些抄
PTA 题的 Online Judge 不确切。

  第1回用的是布局,用结构对 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地图