poj1002-487-3279(字符串處理),poj1002
一,題意:
中文題,不解釋!
二,思路:
1,處理輸入的電話號碼
2,排序num[]數組
3,輸出
三,步驟:
1,消除 -、Q、Z 三種字符,將一個電話號碼轉化為一個整數存如num[]數組
如:num[0]=4873279;
2,快排函數:sort(num.num+t) 頭文件:#include<algorithm>
3,輸出前面3位,後面4位,已經出現的次數(記住使用輸出格式設置符的時候加頭文件:iomanip)
i,設置3位的寬度set(3)、除以10000之後不足3位的補0(setfill('0'))、
cout << setfill('0') << setw(3) << num[i] / 10000;
cout << '-';
ii,設置4位的寬度set(4)、對10000取余之後不足4位的補0(setfill('0'))、
cout << setfill('0') << setw(4) << num[i] % 10000;
cout << ' ' << count << endl;
四,注意:
1,所有電話號碼中,一個重復的都沒有才輸出"No duplicates.",而且只出現一次的不輸出。
2,測試用例中會出現Q和Z,這兩個字母要處理
3,字符數組要開大些,,小了結果不正確
4,注意電話號碼開頭是0的,也照樣輸出0
1 #include<iostream>
2 #include<algorithm>
3 #include<cstring>
4 #include<iomanip> //I/O流控制頭文件
5 using namespace std;
6
7 int ctoi(char ch) //把字符ch轉換為其在手機上對應的數字鍵
8 {
9 if (ch == 'A' || ch == 'B' || ch == 'C')
10 return 2;
11 if (ch == 'D' || ch == 'E' || ch == 'F')
12 return 3;
13 if (ch == 'G' || ch == 'H' || ch == 'I')
14 return 4;
15 if (ch == 'J' || ch == 'K' || ch == 'L')
16 return 5;
17 if (ch == 'M' || ch == 'N' || ch == 'O')
18 return 6;
19 if (ch == 'P' || ch == 'R' || ch == 'S')
20 return 7;
21 if (ch == 'T' || ch == 'U' || ch == 'V')
22 return 8;
23 if (ch == 'W' || ch == 'X' || ch == 'Y')
24 return 9;
25 }
26
27 //注意:定義長度比較大的數組,最好定義在主函數外(即堆內存中)
28 char ch[10000000]; //存儲一行未處理的電話號碼
29 int num[10000000]; //存儲多行已處理的電話號碼(如:num[0]=4873279)
30
31 int main() {
32 int t;
33 while (cin >> t) {
34 for (int i = 0; i < t; i++) {
35 cin >> ch;
36 for (int j = 0, k = 0; j < strlen(ch); j++) {
37 if (ch[j] == '-' || ch[j] == 'Q' || ch[j] == 'Z')
38 continue;
39 else if (ch[j] <= '9')
40 num[i] = num[i] * 10 + ch[j] - '0';
41 else if (ch[j] <= 'Z')
42 num[i] = num[i] * 10 + ctoi(ch[j]);
43 }
44 }
45
46 sort(num, num + t); //快排函數sort頭文件
47 bool flag = false;
48 int count = 1;
49 for (int i = 0; i < t; i++) {
50 if (num[i] == num[i + 1]) {
51 count++;
52 flag = true;
53 }
54 else {
55 if (count > 1) {
56 cout << setfill('0') << setw(3) << num[i] / 10000;
57 cout << '-';
58 cout << setfill('0') << setw(4) << num[i] % 10000;
59 cout << ' ' << count << endl;
60 }
61 count = 1;
62 }
63 }
64
65 if (!flag) {
66 cout << "No duplicates." << endl;
67 }
68 }
69 return 0;
70 }
View Code
版權聲明:本文為博主原創文章,未經博主允許不得轉載。