第一部分:网课学习笔记
第二部分:程序题
①热身题
2)实现思路:
- 利用fopen打开文件
- 利用fgets和fputs读写文件
3)实现结果如下图(截取部分):
②基本题
2)实现思路:
- 用结构体数组记录每一次请求
- 边保存边判断是否此用户名已经出现过
- 累加各个用户请求值总值
- 遍历结构体数组依据条件输出黑客人数和名称
3)实现结果如下图:
③开放题:
方法一的问题:
- 占用太多空间
- 判断标准过于生硬,容易错失大客户
- 无法用于用户名很长的情况
改进的思路:
- 对于接收者名字(bob)不予多次保存至结构体数组,以节省空间;
- 对于较长的用户名,用特定几位来记录,比如仅记录奇数位字母或者前后几位字母
- 更改判断标准,具体思路如下:
- 收集并分析一段时间内的数据,得出一个垃圾请求和正常请求请求值大小的大致分布图以及两种请求的次数的分布图
- 依据上一步得出的分布图,得出区分垃圾请求和正常请求的请求值分界线(记为T)、请求次数分界线(记为S)
- 读取一段时间内产生的数据,同时根据分界线T将请求区分为垃圾请求和正常请求
- 记录每个用户垃圾请求和正常请求的次数
- 一旦某用户垃圾请求的次数超过分界线S,记录此用户用户名
- 再遇到此用户的请求不予记录,节省存储空间
- 依据记录的用户名的名单,输出并拉黑这些用户
另外一种思路:
黑客和普通用户的区别,主要还是体现在短时间内发送请求的次数多少,针对这个特点,得到以下思路:
- 收集并分析一段时间内的数据,得出垃圾请求和正常请求的次数的统计图
- 依据上一步的结论,拟定一个分界线(记为S)
- 对于每一组数据,只保存用户名
- 统计不同用户名出现次数
- 对于出现次数超过S的用户名,视其为黑客
- 输出黑客名单并拉黑