1002 方便記憶的電話號碼

2021-10-23 01:18:02 字數 2911 閱讀 6808

1002:方便記憶的**號碼

檢視 提交 統計 提示 提問

總時間限制: 2000ms 記憶體限制: 65536kb

描述英文本母(除q和z外)和**號碼存在著對應關係,如下所示:

a,b,c -> 2

d,e,f -> 3

g,h,i -> 4

j,k,l -> 5

m,n,o -> 6

p,r,s -> 7

t,u,v -> 8

w,x,y -> 9

標準的**號碼格式是***-***x,其中x表示0-9中的乙個數字。有時為了方便記憶**號碼,我們會將**號碼的數字轉變為英文本母,如把263-7422記成america。有時,我們還加上「-」作為分隔符,如把449-6753記成hi-world。當然,我們未必要將所有的數字都轉變為字母,比如474-6635可以記成iphone-5。

總之,乙個方便記憶的**號碼由數字和除q、z外的英文本母組成,並且可以在任意位置插入任意多的「-」符號。

現在 ,我們有乙個列表,記錄著許多方便記憶的**號碼。不同的方便記憶的**號碼可能對應相同的標準號碼,你的任務就是找出它們。

輸入第一行是乙個正整數n(n <= 100000),表示列表中的**號碼數。

其後n行,每行是乙個方便記憶的**號碼,它由數字和除q、z外的英文本母、「-」符號組成,其中數字和字母的總數一定為7,字串總長度不超過200。

輸出輸出包括若干行,每行包括乙個標準**號碼(***-***x)以及它重複出現的次數k(k >= 2),中間用空格分隔。輸出的標準**號碼需按照公升序排序。

如果沒有重複出現的標準**號碼,則輸出一行「no duplicates.」。

樣例輸入

124873279

its-easy

888-4567

3-10-10-10

888-glop

tut-glop

967-11-11

310-gino

f101010

888-1200

-4-8-7-3-2-7-9-

487-3279

樣例輸出

310-1010 2

487-3279 4

888-4567 3

思路:按照我自己的思路我想的是第一步先處理乙個字串的資料,緊接著就是如何儲存處理完的字串,以及計算字串出現的次數,而且之後還要對儲存完的資料進行排序。

**:

#include

#include

#include

using namespace std;

string reduce

(string p)

else

if(p[i]

=='d'

||p[i]

=='e'

||p[i]

=='f'

)else

if(p[i]

=='g'

||p[i]

=='h'

||p[i]

=='i'

)else

if(p[i]

=='j'

||p[i]

=='k'

||p[i]

=='l'

)else

if(p[i]

=='m'

||p[i]

=='n'

||p[i]

=='o'

)else

if(p[i]

=='p'

||p[i]

=='r'

||p[i]

=='s'

)else

if(p[i]

=='t'

||p[i]

=='u'

||p[i]

=='v'

)else

if(p[i]

=='w'

||p[i]

=='x'

||p[i]

=='y'

)else

if(p[i]

>=

'0'&&p[i]

<=

'9')

else

continue;if

(j==3)

//第三個字元之後就是"-"

result+=

'-';

}return result;

}int main()

else

maplist[s]=1

;//記錄第一次出現的號碼

} int flag=1;

//用來判斷是否所有號碼都是沒有重複的

map::iterator it=maplist.

begin()

;for

(;it!=maplist.

end();

++it)

//遍歷maplist中的值 }if

(flag)cout<<

"no duplicates."

}

我個人認為這道題主要是難在了儲存號碼和號碼出現次數上,同時最後還要進行排序。我看了有些的題目解答,他們是直接開了很大的陣列來存放,空間上花銷比較大。最後我是找到了map,最最好的地方是,map儲存的資料的時候是自動按照key來大小來存放的,因此不需要再排序。要是問我說map來解決這個問題有什麼缺點,我可能是說不出來,這主要是因為我對於map也不是很熟悉,因此如果你們要是有什麼想法我們可以一起討論。

我在用map的時候沒有學的很深就用了一下以下的**來驗證了

#include

#include

#include

using namespace std;

int main()

其他的用法參考了很多別人寫的還是不是特別懂,繼續努力吧。

1002 方便記憶的電話號碼

英文本母 除q和z外 和 號碼存在著對應關係,如下所示 a,b,c 2 d,e,f 3 g,h,i 4 j,k,l 5 m,n,o 6 p,r,s 7 t,u,v 8 w,x,y 9 標準的 號碼格式是 x,其中x表示0 9中的乙個數字。有時為了方便記憶 號碼,我們會將 號碼的數字轉變為英文本母,如...

1002 方便記憶的電話號碼

1002 方便記憶的 號碼 檢視 提交 統計 提示 提問 總時間限制 2000ms 記憶體限制 65536kb 描述英文本母 除q和z外 和 號碼存在著對應關係,如下所示 a,b,c 2 d,e,f 3 g,h,i 4 j,k,l 5 m,n,o 6 p,r,s 7 t,u,v 8 w,x,y 9 ...

百練1002 方便記憶的電話號碼

1002 方便記憶的 號碼 總時間限制 2000ms 記憶體限制 65536kb 描述 英文本母 除q和z外 和 號碼存在著對應關係,如下所示 a,b,c 2 d,e,f 3 g,h,i 4 j,k,l 5 m,n,o 6 p,r,s 7 t,u,v 8 w,x,y 9 標準的 號碼格式是 x,其中...