1. 程式人生 > >PAT乙級—1031. 查驗身份證(15)-native

PAT乙級—1031. 查驗身份證(15)-native

一個合法的身份證號碼由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位數字之和對11取模得到Z,通過Z尋找到M[Z]看是否等於第18位,不等於則輸出該身份證並記錄不合理的身份證數count,若count==0,則輸出All passed.

#include<iostream>
using namespace std;
int main()
{
    int weight[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//權值 
    char M[11]={'1','0','X','9','8','7','6','5','4','3','2'};
    int N;
    cin>>N;
    string id[N+1];
    for(int i=0;i<N;i++)
    {
        cin>>id[i];
    }
    int
count=0; for(int i=0;i<N;i++) { int j; int value=0; for(j=0;j<17;j++) //若有非數字直接輸出跳出迴圈識別下一個 { if(id[i][j]<'0'&&id[i][j]>'9') { cout<<id[i]<<endl; count++; break; } else value=value+(id[i][j]-'0')*weight[j];//計算權值 } if(j==17) //如果j==17說明前17位為數字,計算權值取模得到的校驗碼與18位是否相同 { if((M[value%11])!=id[i][17]) { cout<<id[i]<<endl; count++; } } } if(count==0) cout<<"All passed"; }

題目連結:

相關推薦

PAT乙級1031. 查驗身份證(15)-native

一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下: 首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然後將計算的和對11取模得到值Z;最後按照以下關係

PAT乙級 1031 查驗身份證

一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下: 首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然後將計算的和對11取模得到值Z;最後按照以下關係對應Z值與校驗碼M的值:

PAT 乙級 1031 查驗身份證

1031 查驗身份證 (15 point(s)) 一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下: 首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然後將計

PAT1031. 查驗身份證(15)

題目在這裡 1031. 查驗身份證(15) 時間限制 200 ms 記憶體限制 65536 kB 程式碼長度限制

1031. 查驗身份證(15)

ret 分配 身份證號碼 bsp 順序 scan OS 輸入格式 輸出格式 一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下: 首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8

PAT乙級—1051. 複數乘法 (15)-native

複數可以寫成(A + Bi)的常規形式,其中A是實部,B是虛部,i是虛數單位,滿足i2 = -1;也可以寫成極座標下的指數形式(R*e(Pi)),其中R是複數模,P是輻角,i是虛數單位,其等價於三角形式(R(cos(P) + isin(P))。 現給定兩個複數

PTA C語言版 1031 查驗身份證(15)(15 分)

1031 查驗身份證(15)(15 分) 一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下: 首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然後將計算的和對11

PAT (Basic Level) Practice (中文) 1031 查驗身份證15 分)(C++)

1031 查驗身份證 (15 分) 一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下: 首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然後將計算的和對11取模得到值Z;

1031 查驗身份證15 分)

一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下: 首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然後將計算的和對11取模得到值Z;最後按照以下關係對應Z值與校驗

1031 查驗身份證15

本題用了判斷是否是數字的函式,isdigit(char) 函式,其餘沒有什麼難點; ps:昨天在寫本題時,無論怎麼寫都有錯,所以當自己遇到困難時,應該暫時放下,等到自己心情平靜下來了,才繼續往下面寫。 #include<cstdio> #include<iostream&g

PAT 乙級 1061. 判斷題(15)

amp 統計學 pan esp for str include 答案 輸出 判斷題的評判很簡單,本題就要求你寫個簡單的程序幫助老師判題並統計學生們判斷題的得分。 輸入格式: 輸入在第一行給出兩個不超過100的正整數N和M,分別是學生人數和判斷題數量。第二行給出M個不超過5的

查驗身份證(15)

題目描述 一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下: 首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然後將計算的和對11取模得 到值Z;最後按照以下關係對應Z值與校驗碼M的

1031 查驗身份證——C/C++實現

題目 1031 查驗身份證 (15 point(s)) 一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下: 首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然後將

PAT乙級1031

1031 查驗身份證 (15 分) 一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下: 首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然後將計算的和對11取模得

PAT乙級—1054. 求平均值 (20)-native

本題的基本要求非常簡單:給定N個實數,計算它們的平均值。但複雜的是有些輸入資料可能是非法的。一個“合法”的輸入是[-1000,1000]區間內的實數,並且最多精確到小數點後2位。當你計算平均值的時候,不能把那些非法的資料算在內。 輸入格式: 輸入第一行給出正

PAT乙級—1048. 數字加密(20)-native

本題要求實現一種數字加密方法。首先固定一個加密用正整數A,對任一正整數B,將其每1位數字與A的對應位置上的數字進行以下運算:對奇數位,對應位的數字相加後對13取餘——這裡用J代表10、Q代表11、K代表12;對偶數位,用B的數字減去A的數字,若結果為負數,則再加

PAT乙級—1044. 火星數字(20)-native

火星人是以13進位制計數的: 地球人的0被火星人稱為tret。 地球人數字1到12的火星文分別為:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。 火星人將進位以後的12個高位數字分別稱

PAT乙級—1030. 完美數列(25)-native

給定一個正整數數列,和正整數p,設這個數列中的最大值是M,最小值是m,如果M <= m * p,則稱這個數列是完美數列。 現在給定引數p和一些正整數,請你從中選擇儘可能多的數構成一個完美數列。 輸入格式: 輸入第一行給出兩個正整數N和p,其中N(&l

PAT乙級—1045. 快速排序(25)-native

著名的快速排序演算法裡有一個經典的劃分過程:我們通常採用某種方法取一個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。 給定劃分後的N個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元? 例如給定N = 5, 排

PAT-乙級-1081. 檢查密碼 (15)問題程式碼求助(已解決)

1081. 檢查密碼 (15)時間限制400 ms記憶體限制65536 kB程式碼長度限制8000 B判題程式Standard作者CHEN, Yue本題要求你幫助某網站的使用者註冊模組寫一個密碼合法性檢查的小功能。該網站要求使用者設定的密碼必須由不少於6個字元組成,並且只能有