學校太讓人失望了,居然連POJ都上不去了,還好今天ambition在我用百練AC掉這題后送來了另外一個POJ的網址,雙喜臨門,害我興奮了半天,沒有POJ的日子痛苦啊。畢竟題目來源還得靠它。
這是曾經沒有AC掉的題目,不過在《程序設計導引及在線實踐》上看過,看書寫代碼還是沒親自做的效果好。今天給假期題目來源找題,看中了這題,再次做,強化了一些基本功。
分析幾點:
一。A~Z對應一個Hash數組
二。在每輸入一個數據時就對數據進行處理,轉換字母,去掉’-’
三。qsort的運行,具體看MSDN,這里就講一點。
一個是二位數組的qsort用法:
1
2
3
4
5
6
|
int compare( const void *arg1, const void *arg2 )
{
return strcmp((char*)arg1, (char*)arg2 );
}
int arr[n][11];
qsort(arr, n, sizeof(arr[0]), compare);
|
二是qsort的幾個參數,這里一直不是記得很清楚。
1
2
3
4
5
6
|
void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
|
注意:width: Element size in bytes
cmp函數:如果是升序,則e1 > e2應返回1,e1 = e2 應返回0, e1 < e2 應返回-1.降序則相反。
直接發代碼了:
時間有點大,是600多MS。
看見網上還有其他方法,大家可以去看看。
題目地址:
http://124.205.79.250/JudgeOnline/problem?id=1002
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
// POJ 487-3279
// Author: Tanky Woo
#include <iostream>
using namespace std;
char hash[] = "22233344455566670778889990";
char telphone[100001][20];
char temp[20];
int compare( const void *arg1, const void *arg2 )
{
return strcmp((char*)arg1, (char*)arg2 );
}
// www.wutianqi.com
int main()
{
//freopen("input.txt", "r", stdin);
int flag = 0;
int nCases;
scanf("%d", &nCases);
for(int i = 0; i < nCases; ++i)
{
getchar();
scanf("%s", telphone[i]);
int len = strlen(telphone[i]);
int t = 0;
for(int j = 0; j < len; ++j)
{
if(telphone[i][j] >= 'A' && telphone[i][j] <= 'Z')
temp[t++] = hash[telphone[i][j]-'A'];
else if(telphone[i][j] >= '0' && telphone[i][j] <= '9')
temp[t++] = telphone[i][j];
else if(telphone[i][j] == '-')
;
}
strcpy(telphone[i], temp);
}
qsort(telphone, nCases, sizeof(telphone[0]), compare);
for(int i = 0; i < nCases; ++i)
{
int cnt = 1;
strcpy(temp, telphone[i]);
int j;
for(j = i+1; j < nCases; ++j)
{
if(strcmp(temp, telphone[j]) == 0)
cnt++;
else
break;
}
if(cnt > 1) //這個地方沒處理好,麻煩。。。
{
flag = 1;
for(int k = 0; k < 3; ++k)
printf("%c", temp[k]);
printf("-");
for(int k = 3; k < 7; ++k)
printf("%c", temp[k]);
printf(" %d\n", cnt);
}
i = j-1;
}
if(flag == 0)
printf("No duplicates.\n");
return 0;
}
|
posted on 2010-07-11 17:56
Tanky Woo 閱讀(227)
評論(0) 編輯 收藏 引用