2019寒假訓練營寒假做業(二) 程序題部分

程序題


實現思路:

按照題目要求:


那麼用C語言構建思路很明顯:
  • 建立結構體數組或者動態鏈表(採用了前者,前者構建和遍歷比較簡單)
  • 讀取每一行發送方名稱和數據大小(用%*s忽略「bob」的輸入)
  • 遍歷名單查看是否已經存儲(構建函數,使用strcmp)
  • 記錄內容(構建函數,使用strcpy)
  • 判斷是否異常(在本次請求大小超過LIMIT之後,同時記錄下黑客用戶名,修改已發現黑客個數)
  • 循環至文件結尾
  • 輸出名單(構建函數)python

    (選擇將一些必要數據例如:已經發出請求的個數和已經發現的黑客個數及其hack記錄名單,設爲全局變量,以減小一些在函數中的傳遞調用。)git

實現結果

檢查Request.txt是否已經在該目錄下,檢查完畢後,編譯運行:




打開output.txt:


第二次做業代碼: (但願結果正確Orz。)

hacklistgithub

開放題

吐槽:
- 建立了26*26*26*26的記錄空間,可能會佔據太多無用空間;
- 只適用於四個小寫字母的用戶名,對於更長或者使用更多其它字符的用戶名可能會超出內存範圍,不具備拓展性。 

新的想法:
先另外建立一個arrange.txt文件,將名單按照請求者名稱按照 字典序(ASCLL碼大小) 從新排序輸入到該文件中;再調用該文件,重定向,將屬於同一個請求者的請求集中處理,判斷爲黑客後輸出到ouput.txt。

該想法的優勢:
不須要另開臨時內存記錄,減小了沒必要要的無用空間佔用,也避免了請求者名稱長度不定長或者使用特殊字符的特殊狀況。

缺點:
- 該方法操做複雜,在排序時和判斷時可能須要對文檔中的光標進行移動(調用fseek函數,保證偏移量便可)
- 效率較低,尤爲是在數據極大(超過萬或十萬)的狀況下,排序可能須要考慮快排以減小計算時間,但也必須等到全部人排序結束後纔開始判斷。

實現:暫無。(亦或許使用python的字典和內置函數實現更快)
相關文章
相關標籤/搜索