第m大的身份證號碼(區域性排序代全域性 結構體排序)

2021-09-03 03:05:19 字數 1328 閱讀 7293

時間限制: 1 sec  記憶體限制: 128 mb

提交: 392  解決: 143

[提交] [狀態] [討論版] [命題人:admin]

題目描述

身份證號是我國公民的唯一識別碼,它由18位數字或字母組成(只可能最後一位是字母)。18位身份證號碼各位的含義如下:第1-2位為省、自治區、直轄市**;第3-4位為地級市、盟、自治州**;第5-6位為縣、縣級市、區**。第7-14位為出生年月日,比如19970401代表2023年4月1日;第15-16位為順序號,第17位代表性別,男為單數,女為雙數;第18位為校驗碼,0-9和x。作為尾號的校驗碼,是把前十七位數字代入統一

的公式計算出來的,解答本題你不用關心是如何計算出來的。現在給你n個身份證號碼,請你按照出生年月日的字典序(年齡從大到小)輸出第m個人的身份證號。

輸入第一行包含兩個正整數n和m,兩數間用乙個空格分隔,接下來的n行每行為乙個形如上述格式的身份證號碼(不需要關心校驗碼的正確性,不影響本題解答)。

輸出僅包含一行,為題目要求的乙個身份證號碼。

複製樣例資料

4 2

110108196004063022

13021119640203652x

420333197902112718

210222200012036512

樣例輸出

13021119640203652x
開始以為必須要將全部內容排序 然後想到了用 結構體+sort 排序 但後來寫了一下cmp函式  由於從第7-14位 都需要考慮 所以cmp函式不好寫 後來就放棄了這種想法。(如果用冒泡加判斷每一位更是不容易)

比賽完了 和同學商量 知道原來身份證年齡可以看成乙個數字 這個數字越小 代表他的年齡越大 想了想確實是這樣 而且還是挺簡單的 難怪 好多人都做出來了 。

#include#includeint main()}}

printf("%s\n",a[sum[m-1][0]-1]); //通過排序後的數字 將要求的第m大的身份證號輸出

return 0; // 二維陣列存放原來編號起了非常大的作用

}

struct nodesum[1005];          //開始我定義了二維陣列 但會報錯  只需要定義以為陣列就可以 因為這樣就代表每個

// 都陣列包含兩個int型引數

int cmp(node a,node b)

for(i=0;isort(sum,sum+n,cmp); 一維陣列sort+結構體 排序

Excel中的 身份證號碼

在對excel中敲身份證號碼的時候,常見會遇到以下情況 1.excel中輸入時,顯示為科學計數法 2.excel中輸入時,後三位 都變為0 下面是解決辦法 1.excel中輸入時,顯示為科學計數法 原因 預設,超過11位的數字,都會顯示為科學計數法 下圖數字,表示 1.23457 1011 如何恢復...

二代身份證號碼校驗方法

city 二代身份證校驗 18位 日期1900年以後 param idcard return true校驗通過 public static boolean validateidcarddate string idcard 19 2 d d 0 13 9 1 012 0 1 9 12 d 30 19 ...

Java scripte 校驗身份證號碼的有效性

返回值 0 說明 身份證號不合法,返回1 說明正確 function validateidcard idcard 15位和18位身份證號碼的正規表示式 var regidcard 1 9 d 1 9 d 0 d 1 0 2 0 1 2 d 3 0 1 d d xx 如果通過該驗證,說明身份證格式正確...