当前位置: 首页 > wzjs >正文

唐山网站开发公司拼多多商品关键词搜索排名

唐山网站开发公司,拼多多商品关键词搜索排名,网站开发程序有哪些,网站制作框架云服务计费问题(哈希表 排序)| 附详细 C源码解析 一、题目描述二、输入描述三、输出描述四、样例输入输出输入示例:输出示例:说明: 五、解题思路分析六、C实现源码详解(完整)七、复杂度分析 一…

云服务计费问题(哈希表 + 排序)| 附详细 C源码解析

    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、样例输入输出
      • 输入示例:
      • 输出示例:
      • 说明:
    • 五、解题思路分析
    • 六、C实现源码详解(完整)
    • 七、复杂度分析

一、题目描述

云服务提供商会记录客户使用服务的计费日志。现在你需要根据这些日志为客户计算话单总费用。

日志记录包括:

  • 时间戳(长度为 10 的字符串)
  • 客户标识(长度为 1~16 的字符串)
  • 计费因子(长度为 1~16 的字符串)
  • 计费时长(整数范围为 0~100,超出视为非法并置为 0)

此外还提供一张计费因子单价表,未给出的因子视为单价为 0。

特殊规则

  • 同一客户 同一时间戳 同一计费因子 的记录只计一次,以首次记录为准。

你需要输出每个客户的总话单费用,并按客户标识的字典序升序输出。


二、输入描述

第一行:n 表示日志条数
接下来的 n 行:每行格式为 "时间戳,客户标识,计费因子,计费时长"
下一行:m 表示计费因子单价数
接下来 m 行:每行格式为 "计费因子,单价"

三、输出描述

每行一个客户,格式为:

客户名,总费用

按客户标识升序输出。


四、样例输入输出

输入示例:

5
1627845600,client1,factorA,10
1627845605,client2,factorB,15
1627845610,client1,factorA,5
1627845615,client1,factorB,8
1627845620,client2,factorB,20
2
factorA,5
factorB,7

输出示例:

client1,131
client2,245

说明:

  • client1:

    • factorA:10 + 5 = 15,单价 5 → 15×5=75
    • factorB:8,单价 7 → 8×7=56
    • 总计:75 + 56 = 131
  • client2:

    • factorB:15 + 20 = 35,单价 7 → 35×7 = 245

五、解题思路分析

  1. 去重处理:需要剔除重复记录,即:客户名 + 时间戳 + 计费因子 相同的记录只取第一个。
  2. 合法性检查:时长必须在 [0, 100] 范围,非法按 0 处理。
  3. 单价匹配:若找不到对应的计费因子,则按 0 处理。
  4. 客户费用计算:统计每个客户所有有效记录对应的费用总和。
  5. 排序输出:按客户名字典序升序输出。

六、C实现源码详解(完整)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_N 1000            // 日志最大数量
#define MAX_M 1000            // 计费因子最大数量
#define MAX_LEN 100           // ID 字符串最大长度
#define MAX_CLIENTS 1000      // 客户数量最大值
#define MAX_FACTORS 100       // 计费因子种类最大值// 客户记录结构体:包含客户ID、计费因子ID、累计使用时长
typedef struct {char client_id[MAX_LEN];      // 客户唯一标识char factor_id[MAX_LEN];      // 计费因子唯一标识int total_duration;           // 使用总时长
} ClientRecord;// 因子价格结构体:记录每个因子的价格
typedef struct {char factor_id[MAX_LEN];      // 因子IDint price;                    // 因子的单价
} FactorPrice;ClientRecord records[MAX_CLIENTS * MAX_FACTORS]; // 所有客户因子组合的记录
int record_count = 0;                             // 当前记录条数FactorPrice prices[MAX_FACTORS]; // 存储所有计费因子的价格
int price_count = 0;             // 当前因子数量// 根据客户ID和因子ID查找对应记录在数组中的索引位置,若不存在返回 -1
int find_record_index(const char* client_id, const char* factor_id) {for (int i = 0; i < record_count; i++) {if (strcmp(records[i].client_id, client_id) == 0 &&strcmp(records[i].factor_id, factor_id) == 0) {return i; // 找到返回索引}}return -1; // 未找到
}// 获取某个因子的单价,若找不到返回 0
int get_factor_price(const char* factor_id) {for (int i = 0; i < price_count; i++) {if (strcmp(prices[i].factor_id, factor_id) == 0) {return prices[i].price; // 返回对应单价}}return 0; // 未定义价格时按0处理
}int main() {int n;scanf("%d\n", &n); // 读取日志记录数(n 行)char line[200]; // 用于存储一行输入for (int i = 0; i < n; i++) {fgets(line, sizeof(line), stdin); // 读取一行日志数据// 分割字符串,依次提取日志ID、客户ID、因子ID、时长char* token = strtok(line, ",");char log_id[MAX_LEN], client_id[MAX_LEN], factor_id[MAX_LEN];int duration;strcpy(log_id, token); // 日志IDtoken = strtok(NULL, ",");strcpy(client_id, token); // 客户IDtoken = strtok(NULL, ",");strcpy(factor_id, token); // 因子IDtoken = strtok(NULL, ",");duration = atoi(token); // 时长// 若时长不合法(负值或超过100),设为0if (duration < 0 || duration > 100) duration = 0;// 查找该客户因子的记录int idx = find_record_index(client_id, factor_id);if (idx != -1) {// 已有记录,直接累计时长records[idx].total_duration += duration;} else {// 没有记录,新建一条strcpy(records[record_count].client_id, client_id);strcpy(records[record_count].factor_id, factor_id);records[record_count].total_duration = duration;record_count++; // 记录数加一}}int m;scanf("%d\n", &m); // 读取因子价格的条数for (int i = 0; i < m; i++) {fgets(line, sizeof(line), stdin); // 读取一行因子信息char* token = strtok(line, ",");strcpy(prices[i].factor_id, token); // 因子IDtoken = strtok(NULL, ",");prices[i].price = atoi(token);      // 对应价格price_count++;}// 用于记录已处理过的客户,防止重复统计char processed_clients[MAX_CLIENTS][MAX_LEN];int processed_count = 0;for (int i = 0; i < record_count; i++) {int already_processed = 0;// 判断该客户是否已经处理过for (int j = 0; j < processed_count; j++) {if (strcmp(processed_clients[j], records[i].client_id) == 0) {already_processed = 1;break;}}if (already_processed) continue; // 已处理,跳过// 标记为已处理strcpy(processed_clients[processed_count++], records[i].client_id);int total_cost = 0; // 该客户总费用// 累计该客户所有因子的费用for (int j = 0; j < record_count; j++) {if (strcmp(records[j].client_id, records[i].client_id) == 0) {int price = get_factor_price(records[j].factor_id);total_cost += records[j].total_duration * price;}}// 输出客户ID与其总费用printf("%s,%d\n", records[i].client_id, total_cost);}return 0; // 程序结束
}

七、复杂度分析

  • 时间复杂度
    • 去重处理 + 数据读取: O ( n ) O(n) O(n)
    • 因子价格映射: O ( m ) O(m) O(m)
    • 费用计算: O ( n ) O(n) O(n)
    • 排序输出: O ( k log ⁡ k ) O(k \log k) O(klogk)(k 为客户数)
  • 空间复杂度 O ( n + m ) O(n + m) O(n+m)

http://www.dtcms.com/wzjs/287496.html

相关文章:

  • 广东网站备案查询b2b外链代发
  • 青岛广新信建设咨询公司网站爱站网怎么用
  • 安阳做网站推广制作网页的代码
  • 顺德网站建设包括哪些seo作弊
  • 网站竞价怎么做品牌营销策划网站
  • 网站建设拿什么框架今天上海最新新闻事件
  • 网站建设先进个人免费做做网站
  • 广东网站建设公司有哪些快速优化seo软件
  • 怎么自己开一个网站南阳本地网络推广优化公司
  • 福州网站制作公司名字台州seo快速排名
  • 网站首页动画代码怎样做推广营销
  • 织梦医疗网站源码免费python在线网站
  • 四川省建设工程信息网站网站域名注册
  • 生产销售管理软件网站优化是什么意思
  • 什么网站做任务赚钱吗巨量数据分析入口
  • 辉玲建设集团有限公司网站查域名ip地址查询
  • 门户网站维护怎么做北京百度seo价格
  • 国展做网站的公司线上广告推广
  • 代理公司注销需要多少钱西安seo招聘
  • 高端大气的医院网站网站广告收费标准
  • wordpress 用户角色插件seo小白入门
  • 网站怎么做自动回复的客服线下营销方式主要有哪些
  • 二级域名网站好不好今日足球比赛分析推荐
  • 湖南网站建设企业网络营销策划的基本原则
  • 学校网站建设评分标准室内设计培训哪个机构比较好
  • php做网站导购nba季后赛最新排名
  • 四川做网站找谁绍兴seo排名公司
  • 百度推广还要求做网站关键词搜索量查询
  • 北京公司建网站一般需要多少钱百度网站域名注册
  • 中国建设招投标网站手机搜索引擎排名