電話號碼問題

2021-08-07 21:12:26 字數 2331 閱讀 1552

商業單位需要容易記憶的**號碼,有一些方法可以讓**號碼變得更容易記憶。譬如,可以把**號碼寫成單詞或短語,如 mon-glop 可以代表滑鐵盧大學的**。有時僅僅是把號碼的一部分寫成單詞,如打 310-gino 便可向 gino 比薩餅店定購比薩。另一種讓**號碼容易記憶的方法是將數字用一種容易記的方式組合起來,譬如 3-10-10-10 也可以代表 gino 比薩餅店。

**號碼的標準形式是七位十進位制數字,在它的第三位和第四位之間用連字元連線(例如:666-1200)。**的鍵盤提供了字元與數字之間的對映關係,如下所示:

2a、b和c 

3d、e和f 

4g、h和i 

5j、k和l 

6m、n和o 

7p、r和s 

8t、u和v 

9w、x和y 

q 和 z 沒有對映到鍵盤,而連字元不需要被撥打並且可以根據需要新增和刪除。mon-glop 的標準形式是 666-4567,310-gino 的標準形式是310-4466,3-10-10-10的標準形式也是 310-1010。

如果兩個**號碼有相同的標準形式,那麼這兩個**號碼是相同的。

你所在的公司正在編輯一本當地商業單位的**簿,作為質量控制流程的一部分,你需要確認在該**簿中有沒有錯誤的**號碼,以及有沒有兩個(或兩個以上的)商業單位使用相同的**號碼。由於當地只使用了 3 和 6 兩個區段,因此**號碼的第乙個數字應當永遠是 3 或者 6,如果出現了其它數字,就表示這個**號碼錯了。此外,如果**號碼中出現了 q 和 z,也說明這個**錯了。

一次輸入為乙個樣例。每個號碼一行,每行的字元不會超過 20 個。每次輸入的資料可能會非常大,譬如超過 1,000,000 個**號碼。

你可以假設輸入中可能會出現重複的**號碼不超過 1,500 個,每個號碼重複的次數不超過 1000 次。

輸出包括兩個部分,第乙個部分是錯誤的**號碼,對於這些號碼應當按照輸入的順序以原始的形式輸出。在輸出錯誤**號碼前輸出「error:」,隨後輸出這些號碼,如果沒有錯誤的**號碼,則輸出「not found.」。

第二部分是重複的**號碼,對每乙個在**簿中以任何形式出現一次以上的**號碼,生成一行輸出。這一行應以標準形式給出**號碼,其後跟隨乙個空格,空格後跟隨**號碼在**簿中出現的次數。所有重複的**號碼輸出行應以號碼的公升序排列(小號碼在前)。在輸出重複**號碼前輸出「duplication」,隨後按照上述格式輸出號碼,如果在輸入中沒有重複的**號碼,則輸出:「not found.」。

你所編寫的程式以後可能會在一種特殊的嵌入式裝置上執行,為了降低成本,這種裝置使用的 cpu 不是很快、可用的 ram 為 288k(跟 gba 一樣)且它沒有磁碟裝置因此不能使用檔案作為資料的臨時儲存。

請參考《程式設計珠璣》第一部分,若程式不能在規定的記憶體中執行,則不得分。

測試輸入

期待的輸出

時間限制

記憶體限制

額外程序

測試用例 1

以文字方式顯示

4873279↵

its-easy↵

666-4567↵

3-10-10-10↵

666-glop↵

mon-glop↵

367-11-11↵

310-gino↵

f101010↵

666-1200↵

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

487-3279↵

以文字方式顯示

error:↵

4873279↵

its-easy↵

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

487-3279↵

↵duplication:↵

310-1010 2↵

666-4567 3↵ 1秒

512kb

0測試用例 2

以文字方式顯示

3456789↵

以文字方式顯示

error:↵

not found.↵

↵duplication:↵

not found.↵ 1秒

512kb0

題解:一這個題是會有1e6條**,但是可能出現兩次及以上的只有1500個,所以只用存這1500個就夠了。然而如何判斷它是否重複了呢?以前那樣每個數都存肯定是不行了,會爆記憶體,所以只能換個方法。1

用乙個unsigned char型的陣列或是unsigned int型的陣列來儲存,如果用char來儲存,先將**號碼判斷之後轉化為乙個百萬大小的數字,然後由於首位不是3就是6,所以取後面的6位進行儲存即可。假設這個數是i,那麼就可以用c[i/8]=c[i/8]|1<

c陣列開125000(防止爆記憶體),儲存6開頭的,還有乙個b儲存3開頭的。一開始初始化的時候讓c陣列是0,所以在第一次訪問的時候c[i/8]&1<

電話號碼問題

問題描述 商業單位需要容易記憶的 號碼,有一些方法可以讓 號碼變得更容易記憶。譬如,可以把 號碼寫成單詞或短語,如 mon glop 可以代表滑鐵盧大學的 有時僅僅是把號碼的一部分寫成單詞,如打 310 gino 便可向 gino 比薩餅店定購比薩。另一種讓 號碼容易記憶的方法是將數字用一種容易記的...

小學期 電話號碼問題

商業單位需要容易記憶的 號碼,有一些方法可以讓 號碼變得更容易記憶。譬如,可以把 號碼寫成單詞或短語,如 mon glop 可以代表滑鐵盧大學的 有時僅僅是把號碼的一部分寫成單詞,如打 310 gino 便可向 gino 比薩餅店定購比薩。另一種讓 號碼容易記憶的方法是將數字用一種容易記的方式組合起...

遮蔽電話號碼

private static final string regex fixedphone 010 02 d 0 3 9 d d private static final pattern pattern zipcode pattern.compile regex fixedphone 遮蔽 號碼,固定...