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

华为OD机试真题双机位C卷【微服务的集成测试】 C语言实现

微服务的集成测试

华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型

华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解

其它语言题解链接

华为OD机试双机位C卷 - 微服务的集成测试 (Python & C++ & JAVA & JS & GO)

题目描述

现在有n个容器服务,服务的启动可能有一定的依赖性(有些服务启动没有依赖),其次服务自身启动加载会消耗一些时间。

给你一个 n x n 的二维矩阵useTime,其中

  • useTime[i][i]=10 表示服务i自身启动加载需要消耗10s
  • useTime[i][j]= 1 表示服务i启动依赖服务j启动完成
  • useTime[i][k]=0 表示服务i启动不依赖服务k

其实 0<= i,j,k < n。

服务之间启动没有循环依赖(不会出现环),若想对任意一个服务i进行集成测试(服务i自身也需要加载),求最少需要等待多少时间。

输入描述

第一行输入服务总量 n,
之后的 n 行表示服务启动的依赖关系以及自身启动加载耗时
最后输入 k 表示计算需要等待多少时间后可以对服务 k 进行集成测试

其中 1 <= k <=n,1<=n<=100

输出描述

最少需要等待多少时间(s)后可以对服务 k 进行集成测试

用例1

输入

3 5 0 0 1 5 0 0 1 5 3

输出

15

说明

服务3启动依赖服务2,服务2启动依赖服务1,由于服务1,2,3自身加载需要消耗5s,所以5+5+5=15,需要等待15s后可以对服务3进行集成测试

用例2

输入

3 5 0 0 1 10 1 1 0 11 2

输出

26

说明

服务2启动依赖服务1和服务3,服务3启动需要依赖服务1,服务1,2,3自身加载需要消耗5s,10s,11s,所以5+10+11=26s,需要等待26s后可以对服务2进行集成测试。

用例3

输入

4 2 0 0 0 0 3 0 0 1 1 4 0 1 1 1 5 4

输出

12

说明

服务3启动依赖服务1和服务2,服务4启动需要依赖服务1,2,3,服务1,2,3自身加载需要消耗2s,3s,4s,5s,所以3+4+5=12s(因为服务1和服务2可以同时启动),要等待12s后可以对服务4进行集成测试。

用例4

输入

5 1 0 0 0 0 0 2 0 0 0 1 1 3 0 0 1 1 0 4 0 0 0 1 1 5 5

输出

11

说明

服务3启动依赖服务1和服务2,服务4启动需要依赖服务1,2,服务5启动需要依赖服务3,5,服务1,2,3,4,5自身加载需要消耗1s,2s,3s,4s,5s,所以2+4+5=11s(因为服务1和服务2可以同时启动,服务3和服务4可以同时启动),要等待11s后可以对服务5进行集成测试。

题解

思路

本题采用DFS思路:

  1. 从题目其实可以很容易分析出来一个容器的启动时间自身启动时间 + 所有依赖服务中最长启动时间.
  2. 基于1的分析,结果就是k容器它所依赖服务的最长时间 + 它自身启动时间就是结果。求k容器所依赖服务的启动时间与求k容器启动时间问题本质是一样的。这道题就非常适合使用DFS算法解决。
  3. 可以在普通DFS加入剪枝优化,一个服务器的启动时间如果之前被计算过,如果再次搜索计算可以直接返回之前缓存的时间。下述代码使用visitedneedTime数组实现。

code

#include<stdio.h>#include<stdlib.h>constintN=100;intn,k,time=0;intstore[N][N];//每个服务器需要启动的时间,作为缓存,减少重复搜索intneedtime[N]={0};// 记录是否访问intvisited[N]={0};// 递归获取k的启动时间, 启动时间 = 自身启动时间 + 所有依赖服务中最长启动时间intdfs(intk){// 复用之前的缓存if(visited[k]==1)returnneedtime[k];// 依赖服务的最长时间intmax_time=0;for(inti=0;i<n;i++){if(i!=k&&store[k][i]==1){inttime=dfs(i);if(time>max_time){max_time=time;}}}needtime[k]=max_time+store[k][k];visited[k]=1;returnneedtime[k];}intmain(){scanf("%d",&n);for(inti=0;i<n;i++){for(intj=0;j<n;j++){scanf("%d",&store[i][j]);}}scanf("%d",&k);intresult=dfs(k-1);printf("%d",result);}
http://www.cnnetsun.cn/news/558688.html

相关文章:

  • XDM浏览器扩展:重新定义高效下载体验
  • 百度网盘提取码查询工具完整指南:3步解锁所有隐藏资源
  • Modern Fortran扩展完整配置指南:从零开始搭建专业开发环境
  • MiniGPT-4震撼发现:强大LLM+简单架构=GPT-4级能力,小白必学的多模态模型
  • Betaflight编译器兼容性终极指南:2025.12版本GCC完整解决方案
  • Postman便携版:3分钟掌握免安装API测试神器
  • 洛雪音乐解析源:构建你的跨平台音乐自由解决方案
  • 数字孪生技术选型指南:为什么Eclipse Ditto成为企业级IoT平台的首选方案
  • 终极指南:如何用QMK Toolbox轻松刷新你的机械键盘固件
  • Beremiz自动化控制平台完整使用教程:从入门到实战精通
  • 5分钟掌握QMK Toolbox键盘固件刷写终极指南
  • LeagueAkari功能全解析:英雄联盟智能助手深度使用教程
  • 抖音下载神器:3分钟学会永久保存心仪视频的终极指南
  • Betaflight 2025.12开发环境配置:GCC编译器兼容性深度解析
  • AgileBoot:企业级全栈开发框架的革命性实践与深度解析
  • Navicat密码解密工具终极使用指南:轻松找回遗忘的数据库连接密码
  • 通信原理篇---2FSK的功率谱密度
  • WeKnora智能问答系统架构解析与技术实现路径
  • 洛雪音乐解析工具:解锁全平台音乐播放的终极指南
  • AI基因分析利器SpliceAI:从入门到精通的剪接变异预测指南
  • 如何快速获取百度网盘提取码:技术解析与实用指南
  • 3大优化策略:彻底解决Windows右键菜单臃肿卡顿问题
  • 百度网盘提取码自动查询工具完整使用指南
  • LoRA微调技术详解与实践
  • springboot运动健身食谱与膳食推荐系统
  • 基于Python的新鲜水果推荐系统设计
  • 论文写作进度缓慢?10款AI工具AIGC降重+快速出初稿,节省时间精力
  • 【多智能体控制】基于matlab simulink深度强化学习多智能体控制【含Matlab源码 14914期】
  • 2025年普通人怎么转向大模型?实战+落地+不空谈指南,非常详细收藏我这一篇就够了
  • “Broken Pipe”之谜:异步调用大模型接口超时排查全记录