BUAA数据结构期末考试题——机试检测异常(简)

  • 看前须知
  • 题目内容
    • 问题描述
    • 输入形式
    • 输出形式
    • 样例
    • 样例说明
  • 题解
    • 思路详解
    • 参考代码
    • 补充测试的数据

看前须知

要点介绍和简要声明.

题目内容

问题描述

某教学平台具有考试登录异常检测功能,检测规则如下:

  1. 考试开始后,如果同一账号在不同机器上登录,系统将报警输出异常登录信息(可能存在私自换机器的情况);
  2. 考试开始后,如果同一账号在同一机器上多次登录,属于正常情况,系统不报警。
    编写程序,读入某次考试学生的登录日志信息,对其进行异常检测,输出异常登录信息。日志信息包括登录时间(用包含6个数字的字符串表示,例如:093756,表示9点37分56秒)、机器号(用一整数表示,不超过int的表示范围)、学生学号(即学生账号,唯一标识学生身份的信息,用一整数表示,不超过int的表示范围)、学生姓名(用不含空白符的字符串表示,字符个数不超过15)。

输入形式

先从控制台输入日志信息条数(不超过200条),然后按照登录先后顺序分行输入日志信息,每条信息包括登录时间、机器号、学号和姓名,以一个空格分隔各数据。

输出形式

按照学号从小到大的顺序输出登录异常账号信息(仅包括学号和姓名),每条信息独占一行,学号和姓名以一个空格分隔。如果没有异常登录信息,则什么都不输出。

样例

21
093000 15 191028 wangdi
093000 39 192387 litong
093001 37 190877 liugang
093004 196 197583 huangqinian
093005 201 195211 liuhao
093006 377 193098 zhaogang
093007 1 190001 zhousheng
093007 12 190009 wuhong
093008 197 197583 huangqinian
093008 202 195877 lisisi
093009 309 192387 litong
093402 201 191000 tonghao
093500 196 197583 huangqinian
093507 15 191028 wangdi
093558 85 190010 wangzhuang
093600 63 195333 zhangye
094100 195 197583 huangqinian
095103 200 195211 liuhao
095509 287 190010 wangzhuang
095606 377 193098 zhaogang
095709 15 191028 wangdi
【样例输出】
190010 wangzhuang
192387 litong

195211 liuhao

197583 huangqinian

样例说明

输入了21条登录日志信息,其中有四位学生(学号分别为190010、192387、195211和197583)在多台机器上登录,属于异常登录,输出异常账号登录信息;注意:学号为191028的学生在15号机器上有多次登录,属于正常重复登录。

题解

思路详解

送分题,分模块后,没有难度。
这个题分成三个部分:

  1. 排除上机正常的情况(机器编号和学号匹配);
  2. 找到所有的异常学号;
  3. 去重后排序;

基础的分数一定要拿到。

参考代码

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#include<stdbool.h>
int i,j;
struct node{            //存储信息的结构体 char time[200];      //上机时间 int mID;         //机器编号 int sID;         //学生编号 char name[200];      //学生姓名
}s[20000],ss[20000];
int num=0;
int cmp(const void*p1,const void*p2)
{struct node *a=(struct node*)p1;struct node *b=(struct node*)p2;return a->sID-b->sID;  //根据学生编号排序
}
int main()
{   int n;scanf("%d",&n);     //输入个数 for(i=0;i<n;i++){scanf("%s %d %d %s",s[i].time,&s[i].mID,&s[i].sID,s[i].name);//录入信息 }for(i=0;i<n;i++){for(j=i+1;j<n;j++){if(s[i].sID==s[j].sID && s[i].mID==s[j].mID)  //找到在同一个机器上上机的同学,由于是正常情况,所以删去 {s[j].mID=s[j].sID=0;memset(s[j].name,0,sizeof(s[j].name));memset(s[j].time,0,sizeof(s[j].time));}}}for(i=0;i<n;i++){for(j=i+1;j<n;j++){if(s[i].sID==s[j].sID && s[i].mID!=s[j].mID)//找到学生编号相同,但是在多个机器上登录的一场情况 {ss[num].mID=s[i].mID; //复制到ss里面,方面后序操作 ss[num].sID=s[i].sID;  strcpy(ss[num].name,s[i].name);strcpy(ss[num].time,s[i].time);num++;  //记录异常的数目 }}}for(i=0;i<num;i++){for(j=i+1;j<num;j++){if(strcmp(ss[i].name,ss[j].name)==0)    //去重 {ss[j].sID=-1;}}}qsort(ss,num,sizeof(struct node),cmp);//根据学号排序 for(i=0;i<num;i++){if(ss[i].sID>0)       //输出非重复的学号和姓名 printf("%d %s\n",ss[i].sID,ss[i].name);}return 0;
}

补充测试的数据

其实吧,通过样例其实要考虑的情况就基本全了

BUAA(2021春)机试检测异常(简)(期末考试题)——简单排序相关推荐

  1. BUAA(2021春)空闲空间申请模拟(期中考试题)——注意读题,难度其实一般

    BUAA数据结构期中考试题--空闲空间申请模拟 看前须知 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 笔者的抱怨和思路详解 参考代码 补充测试的数据 看前须知 要点介绍和简要声明. ...

  2. 【华为机试真题 Python】字符串简单数据解压缩

    目录 题目描述 输入描述 输出描述 机试介绍 参考示例 参考代码

  3. BUAA(2021春)实验:树的构造与遍历——根据提示循序渐进(可惜提示有问题Ծ‸Ծ)

    BUAA数据结构第五次编程题 --实验:树的构造与遍历 看前须知 第五次上机题汇总 实验目的与要求 实验内容 Huffman编码文件压缩 问题描述 实验准备 实验步骤 [步骤1] [步骤2] [步骤3 ...

  4. BUAA(2021春)大作业—— 文本摘要生成(数组字典树+快排=0.087s)

    BUAA数据结构大作业-- 文本摘要生成 看前须知 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 看前须知 要点介绍和简要声明. 题目内容 问题描述 在自然语言文 ...

  5. BUAA(2021春)查家谱(士谔书院16级期末)——找最近公共祖先(已上传测试数据和代码)

    BUAA数据结构期末模拟题--查家谱 看前须知 考试回顾 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 测试数据 看前须知 要点介绍和简要声明. 考试回顾 格式控 ...

  6. BUAA(2021春)第一次上机选择+填空(含解析)

    看前须知 要点介绍和简要声明. 第一次上机题汇总 扩展字符A--strchr的灵活使用. 表达式求值. 小数形式与科学计数法转换(简)--分类讨论一定要有逻辑. 超长正整数的减法(高精度减法)+其他三 ...

  7. BUAA(2021春)小型图书管理系统

    BUAA数据结构第二次编程题--小型图书管理系统 看前须知 第二次上机题汇总 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 易错点和难点 参考代码 补充测试的数据 推荐题单 看前须知 ...

  8. BUAA(2021春)文件加密(环)——要求循环链表熟练的删除操作

    BUAA数据结构第三次编程题--文件加密(环) 看前须知 第三次上机题汇总 题目内容 问题描述(建议用链表实现) 输入形式 输出形式 样例 样例说明 题解 易错点和难点 参考代码 补充测试的数据 看前 ...

  9. BUAA(2021春)多项式相乘

    BUAA数据结构第三次编程题--多项式相乘 看前须知 第三次上机题汇总 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 易错点和难点 参考代码 补充测试的数据 看前须知 要点介绍和简要声 ...

最新文章

  1. wpf里的menu怎么用_股市里的两市成交量是什么,它反映了什么,我是怎么用它来定投的...
  2. 在人脸识别的时候,一定要穿上衣服啊!
  3. iangularjs 模板_AngularJS 动态模板
  4. android 進度條_Android更新下載進度條 | 學步園
  5. VTK:Points之ExtractClusters
  6. 简历要避开哪些坑,资深面试官告诉你!
  7. 5.一个三维数组,如何根据最后一维的数字大小正序排列,当然同时要保证索引的关联
  8. Premiere Pro Guru: 3D Titling for Video Editors Premiere Pro 大师教程之 3D字幕条制作教程 Lynda课程中文字幕
  9. 朴素贝叶斯模型、推导、拉普拉斯平滑
  10. 金山词霸笔试题目笔记
  11. 仿9GAG制作过程(三)
  12. 如何利用区块链技术保护知识产权
  13. 电脑中如何打开进程管理器?
  14. 微信小说小程序源码-附带采集
  15. 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第4章 分治策略
  16. 乐吾乐2D可视化绘图引擎
  17. 成为钢铁侠!只需一块RTX3090,微软开源贾维斯(J.A.R.V.I.S.)人工智能AI助理系统
  18. 动态规划问题——免费馅饼
  19. 攻防世界Web题 - unseping 总结
  20. Unity3D 开关按钮Toggle (可以做单选按钮)

热门文章

  1. 音乐搜索器 - 多站合一音乐搜索,音乐在线试听
  2. Matlab图论工具箱的命令
  3. [竖立正确的贝叶斯三观] 关于predictive distribution 和非参贝叶斯的理解
  4. 秦殇多人游戏服务器被占用,秦殇多人图文攻略(1.30原版)
  5. 缓存的6种常见的使用场景
  6. Nor Flash和Nand Flash用途
  7. BLE Zigbee Wifi低功耗芯片选型策略
  8. 深度学习-如何下载以及导入Datasets数据集
  9. linux系统怎么连接显示器,Ubuntu下外接显示器双屏显示的方法
  10. 掌柜大作战(10):人脸识别和图像识别,Java程序员的宿命