news 2026/4/27 6:16:42

华为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/4/23 16:23:58

Modern Fortran终极配置:VS Code环境搭建完全手册

Modern Fortran终极配置&#xff1a;VS Code环境搭建完全手册 【免费下载链接】vscode-fortran-support Fortran language support for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-fortran-support 想要在Visual Studio Code中高效开发For…

作者头像 李华
网站建设 2026/4/25 11:38:43

Betaflight固件编译:如何选择正确的GCC工具链版本

Betaflight固件编译&#xff1a;如何选择正确的GCC工具链版本 【免费下载链接】betaflight Open Source Flight Controller Firmware 项目地址: https://gitcode.com/gh_mirrors/be/betaflight 你是否曾经在编译Betaflight固件时&#xff0c;面对各种GCC版本感到困惑&am…

作者头像 李华
网站建设 2026/4/25 12:05:57

Obsidian PDF注释终极指南:如何实现高效PDF阅读与知识管理

Obsidian PDF注释终极指南&#xff1a;如何实现高效PDF阅读与知识管理 【免费下载链接】awesome-obsidian &#x1f576;️ Awesome stuff for Obsidian 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-obsidian 想要在Obsidian中打造一个强大的PDF注释系统吗&am…

作者头像 李华
网站建设 2026/4/25 16:50:30

Obsidian PDF注释终极指南:如何在5分钟内快速掌握高效笔记管理

Obsidian PDF注释终极指南&#xff1a;如何在5分钟内快速掌握高效笔记管理 【免费下载链接】awesome-obsidian &#x1f576;️ Awesome stuff for Obsidian 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-obsidian 想要彻底改变您的PDF阅读和笔记管理方式吗&am…

作者头像 李华
网站建设 2026/4/22 2:12:25

3步搞定Postman便携版:免安装API测试完整指南

3步搞定Postman便携版&#xff1a;免安装API测试完整指南 【免费下载链接】postman-portable &#x1f680; Postman portable for Windows 项目地址: https://gitcode.com/gh_mirrors/po/postman-portable Postman便携版为开发者提供了即开即用的API测试解决方案&#…

作者头像 李华
网站建设 2026/4/22 4:57:11

w3x2lni专业指南:魔兽地图格式转换与优化全流程

w3x2lni专业指南&#xff1a;魔兽地图格式转换与优化全流程 【免费下载链接】w3x2lni 魔兽地图格式转换工具 项目地址: https://gitcode.com/gh_mirrors/w3/w3x2lni w3x2lni作为魔兽地图开发领域的专业工具&#xff0c;为开发者提供了完整的格式转换和数据处理解决方案。…

作者头像 李华