2019寒假训练营第二次作业

学习视频课程

学习笔记博客

程序题(C语言实现)

GitHub上的仓库

热身题

实现思路
打开输入输出文件,用fgetc和fputc函数逐字符将文件内容写到output.txt中,最后关闭这两个文件

实现结果
output文件里和Request一样,有了好多好多的记录。

基本题

实现思路
1.定义一个结构体数组,用fscanf将文件读入并存入结构体数组。
2.统计所有发送方发送的总信息大小,并将结果存入另一个结构体数组。
3.循环判断超出阈值的人数和名字,并将名字存入一个二维数组(为了先输出黑客的数量),之后按要求输出人数和分别的名字。

实现结果
成功找出了5个黑客,分别是gmhq,dxjr,cftm,mebk,cnkz
2019寒假训练营第二次作业_第1张图片

开放题

1.吐槽
方法一要求把所有请求和对应的信息大小都存下来,占用很多内存,而且其中的服务器名bob更是重复了一万次...把黑客名存进黑名单也很麻烦,而且输出有先输出人数再输出名字的要求,若反过来能舒服不少。

2.我的方法

  • 概述:
    不保存所有请求,但保存整理后每个发送方及其发送的信息总大小(发送方不重复)。
    每次读入文件的一行,然后判断这个发送方之前是否发送过,若没有则为其创建一个记录来保存他发送的信息总大小。之后累计该发送方发送的信息总大小,并判断他发送的信息总量是否超过了阈值,若超过则输出他的名字,并将其标记为黑客,总黑客人数加一。最后关闭文件,输出黑客总数。
  • 优点:
    只需要一个结构体一个函数,更加简练。占用内存更少而且运行速度有所提高。并且总请求数量和黑客数量都支持小于一万的任意正整数,使程序更为灵活。
  • 缺点:
    都放在同一个函数层次不够分明,不太好理解。没有严格按照题目要求,改为先输出黑客名字再输出总个数,但问题不大。依然无法支持任意正整数的请求数量,最高只能处理一万个请求。

3.实现:

2019寒假训练营第二次作业_第2张图片

你可能感兴趣的:(2019寒假训练营第二次作业)