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的字典和内置函数实现更快)
相关文章
相关标签/搜索