題目:ios
思路:數組
構建校驗碼的映射表,使用字符串數組存儲輸入號碼。對字符串數組進行遍歷,並利用num[i]-'0'進行運算和判斷是否符合題目條件(前17位不出現字母),對求和結果進行取模並由映射表進行判斷,依據前述的各類判斷,輸出結果ide
注意點:
spa
利用數組存儲輸入數字,存儲權重;利用映射表存儲校驗碼對應關係code
代碼:blog
1 #include<iostream> 2 #include<unordered_map> 3 using namespace std; 4 5 //映射表 6 int z[11] = { 0,1,2,3,4,5,6,7,8,9,10 }; 7 char m[11] = { '1','0','X','9','8','7','6','5','4','3','2' }; 8 //權重表 9 int wt[17] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 }; 10 //號碼 11 char num[110]; 12 13 int main() 14 { 15 unordered_map<int, char> p; 16 int n, count; 17 18 //構建映射表 19 for (int i = 0;i < 11;i++)p[z[i]] = m[i]; 20 21 scanf("%d", &n); 22 //記錄正確號碼數 23 count = n; 24 for (int i = 0;i < n;i++) 25 { 26 scanf("%s", num); 27 int sum = 0; 28 bool flag = true; 29 30 //進行運算 31 for (int i = 0;i < 17;i++) 32 { 33 //對每位數值進行運算並判斷 34 if ((num[i] - '0') >= 0 && (num[i] - '0') <= 9) 35 { 36 sum += (num[i] - '0')*wt[i]; 37 } 38 else 39 { 40 flag = false; 41 break; 42 } 43 } 44 45 //判斷是否對應校驗碼 46 if (flag) 47 if (p[sum % 11] != num[17])flag = false; 48 49 //輸出不合格號碼 50 if (!flag) 51 { 52 printf("%s\n", num); 53 count--; 54 } 55 56 } 57 58 //判斷是否所有正確 59 if (count == n)printf("All passed"); 60 61 return 0; 62 }