2019寒假训练营寒假作业(二) 程序题部分

程序题


实现思路:

按照题目要求:

1593312-20190130125043667-1341249255.png


那么用C语言构建思路很明显:
  • 创建结构体数组或者动态链表(采用了前者,前者构建和遍历比较简单)
  • 读取每一行发送方名称和数据大小(用%*s忽略“bob”的输入)
  • 遍历名单查看是否已经存储(构建函数,使用strcmp)
  • 记录内容(构建函数,使用strcpy)
  • 判断是否异常(在本次请求大小超过LIMIT以后,同时记录下黑客用户名,修改已发现黑客个数)
  • 循环至文件结尾
  • 输出名单(构建函数)

    (选择将一些必要数据例如:已经发出请求的个数和已经发现的黑客个数及其hack记录名单,设为全局变量,以减少一些在函数中的传递调用。)

实现结果

检查Request.txt是否已经在该目录下,检查完毕后,编译运行:

1593312-20190201000021238-1515204873.png


1593312-20190131235857482-1719528428.png


1593312-20190201000139563-470364637.png


打开output.txt:

1593312-20190201000221930-21096405.png


第二次作业代码: (希望结果正确Orz。)

hacklist

开放题

吐槽:
- 创建了26*26*26*26的记录空间,可能会占据太多无用空间;
- 只适用于四个小写字母的用户名,对于更长或者使用更多其它字符的用户名可能会超出内存范围,不具有拓展性。 

新的想法:
先另外创建一个arrange.txt文件,将名单按照请求者名称按照 字典序(ASCLL码大小) 重新排序输入到该文件中;再调用该文件,重定向,将属于同一个请求者的请求集中处理,判断为黑客后输出到ouput.txt。

该想法的优点:
不需要另开临时内存记录,减少了不必要的无用空间占用,也避免了请求者名称长度不定长或者使用特殊字符的特殊情况。

缺点:
- 该方法操作复杂,在排序时和判断时可能需要对文档中的光标进行移动(调用fseek函数,保证偏移量即可)
- 效率较低,尤其是在数据极大(超过万或十万)的情况下,排序可能需要考虑快排以减少计算时间,但也必须等到所有人排序结束后才开始判断。

实现:暂无。(亦或许使用python的字典和内置函数实现更快)

转载于:https://www.cnblogs.com/fzu2018-clf-bky-blog/p/10344528.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值