不吉利數字




問題描述
    某地的汽車牌照採用按申請牌照順序發放的形式,例如,第一個申請牌照的人就爲000001,第二個爲000002,依次類推。當地人認爲4和77都是不吉利的數字,例如,230489,307756都是不吉利的數字,而207597雖然含有兩個7,但是兩個7不相鄰,因此不算不吉利的數字。由於車主都對領到包含不吉利數字的牌照十分不滿,當地的交通管理局決定,以後在發放牌照的時候,不再發放包含不吉利數字的牌照。然而這樣也帶來了一個問題,就是交通管理局無法根據發放牌照的數字判斷每次到底發放了多少個牌照。
    你的任務是,對於每次給出的一個牌照區間號,推斷出交通管理局今次實際上發放了多少個牌照,並且顯示出沒有發放出去的包含不吉利數字的牌照。其中,牌照區間號由兩個整數n和m表示,且1<n≤m<1000000


設計細節
    (1)首先當然建立牌照的結構體,包括開始編號、結束編號、可發放牌照的個數、包含不吉利數字的牌照個數等。注意C語言的標準中int的最大取值只有65535,能夠超過這個值而不越界是因爲編譯器是C++的,所以規範地說,牌照編號的類型應該是long。
    (2)這裏有兩個值得討論的地方,第一是如何把區間裏所有的不吉利數字保存下來。直接建立1000000個long的數組顯然是不行的,那麼多少可以?爲什麼,需要數學推導。第二是需不需要把牌照區間存儲爲char *,如果存儲爲char *,輸入的合法性怎麼檢查?
    (3)用long存儲了牌照,在檢查是不是不吉利數字的時候,需要首先分解出每一位的數字,這個時候char *就比較方便了。
    (4)如果沒有把不吉利數字存儲下來,那麼獨立的輸出函數就很難實現。在輸出的時候,輸出函數必須有參數標記是不是同時輸出到文件,這和“高內聚”的要求其實是相悖的。


參考設計
    這裏的設計使用long存儲牌照,沒有存儲不吉利數字,是一個很基礎的設計,自己能寫出來就可以不下載。點擊打開鏈接


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章