news 2026/2/15 22:23:22

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为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);}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/16 5:12:34

XDM浏览器扩展:重新定义高效下载体验

XDM浏览器扩展&#xff1a;重新定义高效下载体验 【免费下载链接】xdm Powerfull download accelerator and video downloader 项目地址: https://gitcode.com/gh_mirrors/xd/xdm 在当今数字时代&#xff0c;下载效率直接影响着工作流程的顺畅度。XDM浏览器扩展作为下载…

作者头像 李华
网站建设 2026/2/12 18:49:37

百度网盘提取码查询工具完整指南:3步解锁所有隐藏资源

百度网盘提取码查询工具完整指南&#xff1a;3步解锁所有隐藏资源 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘提取码发愁吗&#xff1f;baidupankey这款专业的百度网盘提取码查询工具将彻底解决你的烦恼。无…

作者头像 李华
网站建设 2026/2/5 2:20:57

Modern Fortran扩展完整配置指南:从零开始搭建专业开发环境

Modern Fortran扩展完整配置指南&#xff1a;从零开始搭建专业开发环境 【免费下载链接】vscode-fortran-support Fortran language support for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-fortran-support Modern Fortran扩展为Visual S…

作者头像 李华
网站建设 2026/2/16 15:55:43

Betaflight编译器兼容性终极指南:2025.12版本GCC完整解决方案

Betaflight编译器兼容性终极指南&#xff1a;2025.12版本GCC完整解决方案 【免费下载链接】betaflight Open Source Flight Controller Firmware 项目地址: https://gitcode.com/gh_mirrors/be/betaflight 你是否曾因编译器版本不匹配而无法成功编译Betaflight固件&…

作者头像 李华
网站建设 2026/2/16 2:40:32

Postman便携版:3分钟掌握免安装API测试神器

Postman便携版&#xff1a;3分钟掌握免安装API测试神器 【免费下载链接】postman-portable &#x1f680; Postman portable for Windows 项目地址: https://gitcode.com/gh_mirrors/po/postman-portable Postman便携版是一款专为开发者打造的免安装API测试工具&#xf…

作者头像 李华