news 2026/6/17 18:32:04

华为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/6/15 2:53:26

Snap2HTML完整指南:一键生成交互式目录网页的终极解决方案

Snap2HTML完整指南&#xff1a;一键生成交互式目录网页的终极解决方案 【免费下载链接】Snap2HTML Generates directory listings contained in a single, app-like HTML files 项目地址: https://gitcode.com/gh_mirrors/sn/Snap2HTML 想要快速将硬盘目录结构转换为美观…

作者头像 李华
网站建设 2026/6/14 2:44:28

如何在VS Code中高效配置Modern Fortran:从零到精通的终极指南

如何在VS Code中高效配置Modern Fortran&#xff1a;从零到精通的终极指南 【免费下载链接】vscode-fortran-support Fortran language support for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-fortran-support Modern Fortran扩展让Fortr…

作者头像 李华
网站建设 2026/6/14 2:50:14

10个颠覆认知的IOCCC代码解密技巧:当C语言遇上艺术

10个颠覆认知的IOCCC代码解密技巧&#xff1a;当C语言遇上艺术 【免费下载链接】winner Winners of the International Obfuscated C Code Contest 项目地址: https://gitcode.com/GitHub_Trending/wi/winner 你见过会画画的代码吗&#xff1f;当编程遇上艺术&#xff0…

作者头像 李华
网站建设 2026/6/12 22:57:58

Blur:终极视频运动模糊处理工具,让普通视频拥有电影级质感

Blur&#xff1a;终极视频运动模糊处理工具&#xff0c;让普通视频拥有电影级质感 【免费下载链接】blur Add motion blur to videos 项目地址: https://gitcode.com/gh_mirrors/bl/blur 想要为你的视频添加专业级的运动模糊效果吗&#xff1f;Blur这款免费开源的桌面应…

作者头像 李华
网站建设 2026/6/12 22:57:47

怎样快速搭建企业级应用:基于SpringBoot+Vue3的创新方案

怎样快速搭建企业级应用&#xff1a;基于SpringBootVue3的创新方案 【免费下载链接】AgileBoot-Back-End &#x1f525; 规范易于二开的全栈基础快速开发脚手架。&#x1f525; 采用Springboot Vue 3 Typescript Mybatis Plus Redis 更面向对象的业务建模 面向生产的项目…

作者头像 李华
网站建设 2026/6/12 23:01:13

3分钟学会用Blur为视频添加专业级运动模糊效果

3分钟学会用Blur为视频添加专业级运动模糊效果 【免费下载链接】blur Add motion blur to videos 项目地址: https://gitcode.com/gh_mirrors/bl/blur 想要让视频看起来更加流畅自然吗&#xff1f;运动模糊效果正是你需要的利器&#xff01;Blur作为一款开源视频运动模糊…

作者头像 李华