6. 某位用户的某次上网行为可以建模成一个三元组{用户 ID、开始时间、结束时 间}。给定一组上网行为数据,编写一个函数,按照用户总上网时长降序返回所 有用户 ID。要求编写的函数 func6 的函数原型如下: vector<int> func6(const vector<User_Activity>& activities); 其中,用户自定义类型 User_Activity 的定义如下: struct User_Activity { int id; //用户ID int start_time; //开始时间 int end_time; //结束时间 }; 注意:参数 activities 中一个用户可能有多次上网行为。 比如对于上网行为数据:{1, 0, 10}, {2, 0, 5}, {1, 20, 28}, {3, 0, 20}, {2, 10, 15} 容易看出用户 1 的总上网时长是 10+8=18,用户 2 的总上网时长是 5+5=10,用户 3 的总上网时长是 20。所以最终应该返回的用户 ID 是 3, 1, 2。 此外,你还应该处理输入数据存在问题的情况。正确的数据应该满足 1) 任意一次上网行为的开始时间小于等于结束时间; 2) 任意用户的任意两次上网行为在时间上不重叠。比如{1, 0, 5}, {1, 10, 15}是一 组正确数据,{1, 0, 10}, {1, 10, 15}也是一组正确数据。而{1, 0, 10}, {1, 1, 5}是 一组错误数据,{1, 0, 10}, {1, 5, 15}也是一组错误数据。 如果输入数据存在问题,抛出异常"invalid input" 提示:你可以先处理数据正常情况,测试正确后再考虑数据错误情况。该题目的来源

时间: 2023-06-15 07:07:35 浏览: 34
我编写了一个符合要求的 C++ 函数,可以按照用户总上网时长降序返回所有用户 ID,代码如下: ```c++ #include <vector> #include <algorithm> #include <stdexcept> using namespace std; struct User_Activity { int id; // 用户ID int start_time; // 开始时间 int end_time; // 结束时间 }; bool cmp(const pair<int, int>& a, const pair<int, int>& b) { return a.second > b.second; } vector<int> func6(const vector<User_Activity>& activities) { // 检查输入数据是否合法 for (int i = 0; i < activities.size(); ++i) { if (activities[i].start_time > activities[i].end_time) { throw invalid_argument("invalid input"); } } for (int i = 1; i < activities.size(); ++i) { if (activities[i].id == activities[i-1].id && activities[i].start_time < activities[i-1].end_time) { throw invalid_argument("invalid input"); } } // 计算每个用户的总上网时长 vector<pair<int, int>> total_time; // 存储每个用户的总上网时长 for (int i = 0; i < activities.size(); ++i) { bool found = false; for (int j = 0; j < total_time.size(); ++j) { if (total_time[j].first == activities[i].id) { total_time[j].second += activities[i].end_time - activities[i].start_time; found = true; break; } } if (!found) { total_time.push_back(make_pair(activities[i].id, activities[i].end_time - activities[i].start_time)); } } // 按照总上网时长降序排序 sort(total_time.begin(), total_time.end(), cmp); // 返回所有用户 ID vector<int> result; for (int i = 0; i < total_time.size(); ++i) { result.push_back(total_time[i].first); } return result; } ``` 该函数首先检查输入数据是否合法,如果数据有误则抛出异常"invalid input"。然后计算每个用户的总上网时长,存储在 vector<pair<int, int>> 类型的 total_time 中。最后按照总上网时长降序排序,将所有用户 ID 存储在 vector<int> 类型的 result 中并返回。

相关推荐

最新推荐

recommend-type

pscad电缆线路的建模.doc

关于pscad内电缆线路建模的方法。 pscad(PSCAD/EMTDC)(全称Power Systems Computer Aided Design)是世界上广泛使用的电磁暂态仿真软件,EMTDC是其仿真计算核心,PSCAD为EMTDC(Electromagnetic Transients ...
recommend-type

全国大学生数学建模竞赛论文模板 .doc

这是这次参加数学建模的论文模板,里面的文字格式我都设置好啦,就是标题的什么格式的,还有,有童鞋不知道我们的数学建模论文是不能有目录的,这里我说一下,我喜欢自己手打标题,感觉自己手打的要比自动的好操作。
recommend-type

2020五一建模 a题题目.docx

A题煤炭价格预测问题 煤炭属于大宗商品,煤炭价格既受国家相关部门的监管,又受国内煤炭市场的影响。除此之外,气候变化、出行方式、能源消耗方式、国际煤炭市场等其他因素也会影响煤炭价格。请完成如下问题。...
recommend-type

数学建模模型分类.pdf

数学建模之三大模型十大算法总结,总结了常用的三类模型,及各个常用模型,并且列举了这些模型的适用案例。
recommend-type

Buck-Boost变换器的建模与仿真-.pdf

Buck-Boost变换器的建模与仿真,包含源程序。利用s语言实现建模和利用simulink仿真建模两种方式。DC-DC变换器的动态建模是用数学模型描述DC-DC变换器系统 的动态行为和控制性能。动态模型可用于DC-DC 变换器系统的...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。