北航2023年考研机试题

news/2024/4/30 3:37:54

【问题描述】一共6个手机基站,具有记录手机连接基站的能力,6个手机基站分别为ABCDEF,他们具有自己的覆盖范围且任何两个基站的覆盖范围不想交,基站保存的手机登陆日志包括手机号(11位,用字符串保存),基站编号,登陆时间(6位数,用字符串保存),登出时间(6位,用字符串保存)

        要求:某一天多个基站的手机登陆日志信息和一个要查找的人员手机号,查找与该人员同时空的手机号

        输入:一个N和N条登陆日志信息,最后还有一个要查找人员的手机号

        输出:输出与要查找人员时间和地点有重叠的人员信息(即日志信息)依次输出手机号,基站编号,登陆时间和登出时间;按照登陆时间进行排序,如果登陆时间相同按照手机号进行排序(如果一个人员的登出时间和另一个人员的登陆时间相同也算时间重叠)

输入:样例

11111 A 080000 225959

22222 B 080000 225959

33333 A 100000 110000

44444 B 101000 110000

55555 A 120000 131000

66666 A 225959 235959

77777 A 100000 120000

11111

第一个是手机号;第二个是基站编号;第三个是登陆时间,上面的例子就是:08:00:00;第四个是登出时间,上面的例子对应的时间就是23:59:59,每个日志中间还有一个空行。

暴力代码:

#include<bits/stdc++.h>
using namespace std;
//结构体数组,类,容器 
struct Basic{string  phone;//11位手机号 char basic;//基站编号 string intime;//登陆时间 string outtime; //登出时间 
};
int  yes;
vector<Basic> x;//结构体即是一种数据类型与地点,时间有重叠的结构体编号 
vector<int> y;//存储判断是否重复 
bool compare(const Basic &a,const Basic &b){//使用方式,结构体名称加解引用 if(a.intime==b.intime){return a.phone<b.phone;}return a.intime<b.intime;
}
int main(){int n;//n条需要输入的信息cin>>n; Basic pary[n];//重点bool panduan =true;//判断容器中是否出现重复元素 for(int i=0;i<n;i++){string  phone;//11位手机号 char basic;//基站编号 string intime;//登陆时间 string outtime; //登出时间 cin>>phone>>basic>>intime>>outtime;pary[i].phone=phone;pary[i].basic=basic;pary[i].intime=intime;pary[i].outtime=outtime;} string search;cin>>search;for(int i=0;i<n;i++){//循环判断找要查找人员的信息 if(pary[i].phone==search){yes=i;} }//找到了手机号对应的全部信息,num,time,outfor(int i=0;i<n;i++){//先遍历基站一样的 if(pary[i].basic==pary[yes].basic&&yes!=i){x.push_back(pary[i]);y.push_back(i);} } for(int i=0;i<n;i++){//再遍历入时间一样的 if(pary[i].intime==pary[yes].intime&&yes!=i){for(int j=0;j<x.size();j++){if(y[j]==i){//有重复数字 panduan=false;}}if(panduan==true){y.push_back(i);x.push_back(pary[i]);} }}for(int i=0;i<n;i++){//再遍历出时间一样的 if(pary[i].outtime==pary[yes].outtime&&yes!=i){for(int j=0;j<x.size();j++){if(y[j]==i){//有重复数字 panduan=false;}}if(panduan==true){x.push_back(pary[i]);y.push_back(i);} }	 }for(int i=0;i<n;i++){//再遍历入时间一样的 if(pary[i].intime==pary[yes].outtime||pary[i].outtime==pary[yes].intime){if(yes!=i){//把基准去掉 for(int j=0;j<x.size();j++){if(y[j]==i){//有重复数字 panduan=false;}}if(panduan==true){x.push_back(pary[i]);y.push_back(i);} }} }sort(x.begin(),x.end(),compare); for(int i=0;i<x.size();i++){cout<<x[i].phone<<" "<<x[i].basic<<" "<<x[i].intime<<" "<<x[i].outtime<<endl; }}

思路:通过定义一个Basic容器对一条日志进行存储,一个int型容器对符合要求的容器下标进行存储,顺便进行判断是否重叠,最后把整个结构体容器按照compare定义的排序方式进行排序,最后输出结果。

重点:vector<Basic> x; 结构体即是一种数据结构,可以通过容器定义一次,在往容器中传入数据时,可以把一整个结构体传进去。

        传入时,结构体容器将结构体数组的一个元素传入,即为一个完整的结构体。

注意:sort函数的语法自定义排序时需要定义一个函数,且如果是要用容器结构体时,要在compare中对应好变量类型。

附:gpt简化后的代码:

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;// 结构体 
struct Basic {string phone;char basic;string intime;string outtime;
};// 辅助函数:判断两个时间段是否有重叠
bool isTimeOverlap(const Basic& a, const Basic& b) {// 注意:此处假设时间字符串可以直接比较,实际项目中应转换为合适的数据结构进行比较return (a.intime <= b.outtime && b.intime <= a.outtime) || (a.outtime <= b.intime && b.outtime <= a.intime);
}bool compare(const Basic &a, const Basic &b) {if (a.intime == b.intime) {return a.phone < b.phone;}return a.intime < b.intime;
}int main() {int n;cin >> n;Basic pary[n];for (int i = 0; i < n; i++) {cin >> pary[i].phone >> pary[i].basic >> pary[i].intime >> pary[i].outtime;}string search;cin >> search;for (int i = 0; i < n; i++) {if (pary[i].phone == search) {vector<Basic> x;//结构体容器 for (int j = 0; j < n; j++) {if (i != j && (pary[j].basic == pary[i].basic || isTimeOverlap(pary[i], pary[j]))) {x.push_back(pary[j]);}}sort(x.begin(), x.end(), compare);for (const auto& record : overlapping_records) {cout << record.phone << " " << record.basic << " " << record.intime << " " << record.outtime << endl;}break;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/11814.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

开启 Keep-Alive 可能会导致http 请求偶发失败

大家好&#xff0c;我是蓝胖子&#xff0c;说起提高http的传输效率&#xff0c;很多人会开启http的Keep-Alive选项&#xff0c;这会http请求能够复用tcp连接&#xff0c;节省了握手的开销。但开启Keep-Alive真的没有问题吗&#xff1f;我们来细细分析下。 最大空闲时间造成请求…

【APUE】网络socket编程温度采集智能存储与上报项目技术------多路复用

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…

C++ 【原型模式】

简单介绍 原型模式是一种创建型设计模式 | 它使你能够复制已有对象&#xff0c;客户端不需要知道要复制的对象是哪个类的实例&#xff0c;只需通过原型工厂获取该对象的副本。 以后需要更改具体的类或添加新的原型类&#xff0c;客户端代码无需改变&#xff0c;只需修改原型工…

[Spring Cloud] gateway全局异常捕捉统一返回值

文章目录 处理转发失败的情况全局参数同一返回格式操作消息对象AjaxResult返回值状态描述对象AjaxStatus返回值枚举接口层StatusCode 全局异常处理器自定义通用异常定一个自定义异常覆盖默认的异常处理自定义异常处理工具 在上一篇章时我们有了一个简单的gateway网关 [Spring C…

腾讯云轻量服务器流量不够用了会怎么样?

腾讯云轻量应用服务器是限制月流量的&#xff0c;如果当月流量不够用了&#xff0c;流量超额了怎么办&#xff1f;流量超额后&#xff0c;需要另外支付流量费&#xff0c;如果你的腾讯云账号余额&#xff0c;就会自动扣除对应的流量费&#xff0c;如果余额不足&#xff0c;轻量…

巨控科技新品发布:全方位升级,引领智能控制新纪元

标签: #巨控科技 #智能控制 #新品发布 #GRM560 #OPC560 #NET400 在智能控制领域&#xff0c;巨控科技始终以其前沿技术和创新产品引领着市场的潮流。近日&#xff0c;巨控科技再次以其行业领先的研发实力&#xff0c;推出了三大系列的新产品&#xff0c;旨在为各行各业提供更…