华为OD机考双机位C卷 - 任务编排系统 (Java Python JS C/C++ GO )

最新华为上机考试

真题目录:点击查看目录

华为OD面试真题精选:点击立即查看
华为OD机考双机位C卷 - 任务编排系统

题目描述

任务编排服务负责对任务进行组合调度。参与编排的任务有两种类型,其中一种执行时长为taskA,另一种执行时长为taskB。任务一旦开始执行不能被打断,且任务可连续执行。服务每次可以编排num个任务。请编写一个方法,生成每次编排后的任务所有可能的总执行时长。

输入描述

第1行输入分别为:第1种任务执行时长taskA 第2种任务执行时长taskB 这次要编排的任务个数num 以逗号分隔

输出描述

数组形式返回所有总执行时时长,需要按从小到大排列。

备注 :每种任务的数量都大于本次可以编排的任务数量,

  • 0 < taskA
  • 0 < taskB
  • 0 <= num <= 100000`

示例1

输入

1,2,3

输出

[3, 4, 5, 6]

解题思路

1. 问题分析

我们需要计算完成N NN个任务总共可能花费的时间。

  • 已知条件:
    • 任务类型 A 的耗时:T a T_aTa
    • 任务类型 B 的耗时:T b T_bTb
    • 总任务数量:N NN
  • 约束:这N NN个任务中,每一个都可以自由选择是做类型 A 还是类型 B。

2. 核心逻辑

这个问题本质上是一个枚举(遍历)问题。因为总任务数是固定的N NN,如果我们确定了做i ii个 A 类任务,那么剩下的N − i N - iNi个必然是 B 类任务。

步骤如下:

  1. 输入解析

    • 获取三个数值:T a T_aTaT b T_bTbN NN
  2. 遍历所有组合

    • 我们可以遍历 A 类任务的数量,设为i ii
    • i ii的取值范围是从0 00N NN(包括 0 和N NN)。
      • i = 0 i = 0i=0表示全做 B 类任务。
      • i = N i = Ni=N表示全做 A 类任务。
  3. 计算总耗时

    • 对于每一个i ii,计算当前组合的总时间:
      TotalTime = ( i × T a ) + ( ( N − i ) × T b ) \text{TotalTime} = (i \times T_a) + ((N - i) \times T_b)TotalTime=(i×Ta)+((Ni)×Tb)
  4. 去重(Deduplication)

    • 为什么要考虑去重?如果T a = T b T_a = T_bTa=Tb,或者在某些特定数值组合下,不同的i ii可能会算出相同的总时间。
    • 策略:使用一个“集合(Set)”或者“哈希表(Map)”数据结构来存储计算出的结果。这些数据结构的特性是自动过滤重复的元素,只保留唯一值。
  5. 排序(Sorting)

    • 题目通常要求输出有序的结果(通常是升序)。
    • 将去重后的所有结果提取出来,进行从小到大的排序。

Java

importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);// 读取输入行if(scanner.hasNextLine()){Stringline=scanner.nextLine();// 分割字符串String[]parts=line.split(",");// 解析数值,使用 long 防止总时长溢出longtaskA=Long.parseLong(parts[0]);longtaskB=Long.parseLong(parts[1]);intnum=Integer.parseInt(parts[2]);// 使用 TreeSet 自动排序并去重Set<Long>results=newTreeSet<>();// 遍历 taskA 可能出现的次数 (0 到 num)for(inti=0;i<=num;i++){longcountA=i;longcountB=num-i;longtotalTime=countA*taskA+countB*taskB;results.add(totalTime);}// 输出结果,TreeSet 的 toString 方法刚好符合 [a, b, c] 的格式System.out.println(results);}scanner.close();}}

Python

importsysdefmain():# 从标准输入读取数据# strip() 用于去除首尾可能的空白字符input_str=input()ifnotinput_str:returntry:# 解析输入: taskA, taskB, numparts=input_str.split(',')task_a=int(parts[0])task_b=int(parts[1])num=int(parts[2])# 使用集合 set 来自动去重results=set()# 遍历 task_a 的数量 i,从 0 到 num# task_b 的数量自然为 num - iforiinrange(num+1):total_time=i*task_a+(num-i)*task_b results.add(total_time)# 转换为列表并排序sorted_results=sorted(list(results))# Python 的列表打印格式默认即为 [a, b, c],符合题目要求print(sorted_results)exceptValueError:# 防止输入格式错误的异常处理passif__name__=="__main__":main()

JavaScript

constreadline=require('readline');constrl=readline.createInterface({input:process.stdin,output:process.stdout});rl.on('line',(line)=>{line=line.trim();if(!line)return;constparts=line.split(',');if(parts.length!==3)return;consttaskA=parseInt(parts[0]);consttaskB=parseInt(parts[1]);constnum=parseInt(parts[2]);constresults=newSet();for(leti=0;i<=num;i++){consttotalTime=i*taskA+(num-i)*taskB;results.add(totalTime);}constoutputArray=Array.from(results);// 必须传入比较函数进行升序排列outputArray.sort((a,b)=>a-b);// 【修正点】手动格式化输出// join(', ') 会用逗号加空格连接数组元素// 然后手动加上首尾的方括号console.log(`[${outputArray.join(', ')}]`);rl.close();});

C++

#include<iostream>#include<string>#include<sstream>#include<vector>#include<set>#include<algorithm>using namespace std;intmain(){string line;getline(cin,line);istringstreamiss(line);vector<int>parts;string part;while(getline(iss,part,',')){parts.push_back(stoi(part));}if(parts.size()!=3)return0;inttaskA=parts[0];inttaskB=parts[1];intnum=parts[2];set<int>results;for(inti=0;i<=num;i++){inttotalTime=i*taskA+(num-i)*taskB;results.insert(totalTime);}vector<int>outputArray(results.begin(),results.end());// 必须传入比较函数进行升序排列sort(outputArray.begin(),outputArray.end());cout<<"[";for(size_ti=0;i<outputArray.size();i++){cout<<outputArray[i];if(i<outputArray.size()-1){cout<<", ";}}cout<<"]"<<endl;return0;}

Go

packagemainimport("bufio""fmt""os""sort""strconv""strings")funcmain(){// 1. 读取标准输入reader:=bufio.NewReader(os.Stdin)// 读取一行(包含换行符)line,err:=reader.ReadString('\n')iferr!=nil{// 如果是空输入或 EOF,直接返回return}// 2. 数据清洗与解析line=strings.TrimSpace(line)ifline==""{return}parts:=strings.Split(line,",")iflen(parts)!=3{return}// 转换字符串为整数// 注意:在 64 位系统下 int 等同于 int64,足够应对大数// 如果担心 32 位系统溢出,可以使用 strconv.ParseInt 转为 int64taskA,_:=strconv.Atoi(parts[0])taskB,_:=strconv.Atoi(parts[1])num,_:=strconv.Atoi(parts[2])// 3. 计算所有可能的结果并去重 (使用 map 模拟 Set)uniqueResults:=make(map[int]bool)fori:=0;i<=num;i++{// 公式:i 个 A,(num-i) 个 BtotalTime:=i*taskA+(num-i)*taskB uniqueResults[totalTime]=true}// 4. 将 map 的 key 提取到切片中varoutput[]intfork:=rangeuniqueResults{output=append(output,k)}// 5. 排序 (Go 的 sort.Ints 默认就是升序)sort.Ints(output)// 6. 格式化输出// Go 默认 fmt.Println(output) 输出为 [3 4 5 6] (无逗号)// 下面代码将其转换为 [3, 4, 5, 6]varstrOutput[]stringfor_,v:=rangeoutput{strOutput=append(strOutput,strconv.Itoa(v))}fmt.Printf("[%s]\n",strings.Join(strOutput,", "))}

C语言

#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX_LINE1000#defineMAX_RESULTS10000// 比较函数,用于qsortintcompare(constvoid*a,constvoid*b){return(*(int*)a-*(int*)b);}intmain(){charline[MAX_LINE];intresults[MAX_RESULTS];intresultsCount=0;// 读取输入if(fgets(line,sizeof(line),stdin)==NULL){return1;}// 去除行尾的换行符line[strcspn(line,"\n")]=0;// 分割输入char*token=strtok(line,",");inttaskA=atoi(token);token=strtok(NULL,",");inttaskB=atoi(token);token=strtok(NULL,",");intnum=atoi(token);// 计算结果for(inti=0;i<=num;i++){inttotalTime=i*taskA+(num-i)*taskB;// 检查是否已存在该结果intexists=0;for(intj=0;j<resultsCount;j++){if(results[j]==totalTime){exists=1;break;}}// 如果不存在,则添加到结果数组if(!exists){results[resultsCount++]=totalTime;}}// 排序结果qsort(results,resultsCount,sizeof(int),compare);// 输出结果printf("[");for(inti=0;i<resultsCount;i++){printf("%d",results[i]);if(i<resultsCount-1){printf(", ");}}printf("]\n");return0;}

文章目录

  • 最新华为上机考试
  • 题目描述
  • 输入描述
  • 输出描述
  • 示例1
  • 解题思路
      • 1. 问题分析
      • 2. 核心逻辑
  • Java
  • Python
  • JavaScript
  • C++
  • Go
  • C语言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1119970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣数据库——组合两个表

175. 组合两个表https://leetcode.cn/problems/combine-two-tables/ 一 题目 表: Person 列名类型PersonIdintFirstNamevarcharLastNamevarchar personId 是该表的主键&#xff08;具有唯一值的列&#xff09;。该表包含一些人的 ID 和他们的姓和名的信息。表: Address 列…

基于人脸识别的企业员工考勤管理系统没视频应用和研究

文章目录人脸识别考勤系统的研究背景系统核心技术非视频应用场景研究进展与挑战实际应用价值项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;人脸识别考勤系统的…

计及调峰主动性的风光水火储多能系统互补协调优化调度Matlab实现

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

最新流出9款免费AI论文工具!知网维普查重一把过,无AIGC痕迹

紧急预警&#xff1a;毕业倒计时不足72小时&#xff1f;这些AI工具能救你命&#xff01; 凌晨3点的图书馆、导师第12次打回的修改稿、查重报告上飘红的大片文字、答辩PPT还没开始做……如果你正被这些绝望瞬间包围&#xff0c;现在看到这篇文章就是最后的救命稻草&#xff01;…

基于储能电站服务的冷热电多微网系统双层优化配置Matlab实现

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

想他了,撒撒娇,男人真的很吃这一套

&#x1f496; 我今天没吃糖&#xff0c;却甜到发慌——因为满脑子都是你呀&#xff5e;&#x1f319; 月亮都睡了&#xff0c;我还在想你&#xff0c;快补偿我一个晚安吻&#x1f618;&#x1f388; 想做你的专属小尾巴&#xff0c;你走哪我粘哪&#xff0c;甩都甩不掉&#x…

lvgl之显示gif测试代码

#include "lvgl/src/lv_lib_gif/lv_gif.h" void lvgl_gif_demo() {lv_obj_t* parent = lv_scr_act();</

【集群划分】考虑楼宇空间布局的电力系统集群规划策略附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

深度学习毕设选题推荐:基于python的cnn卷积网络识别树叶是否存在病变

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

深度学习毕设选题推荐:卷神经网络 基于深度学习算法训练数字识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

大模型岗位薪资爆了,年薪百万轻轻松松,非常详细收藏我这一篇就够了

2024下半年&#xff0c;“大模型狂热”愈演愈烈 国内巨头战队华为、百度、阿里在AIGC的厮杀中 从通用大模型渗透到各垂类应用市场 就连创投资本也独宠AIGC企业 百度、科大讯飞市值分别增加27亿和45亿美元 这导致AI人才缺口大、薪资普遍上涨↑40% 不少企业开出百万年薪挖掘大模型…

vue基于spring boot的学生宿舍分配报修管理系统应用和研究

文章目录摘要技术实现应用价值项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着高校规模的扩大和学生人数的增加&#xff0c;传统的学生宿舍管理方式已…

计算机深度学习毕设实战-基于python深度学习的鞋类分类

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

vue基于人脸识别基于spring boot的网络考试系统的设计与实现应用和研究

文章目录摘要关键词项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着在线教育的普及&#xff0c;网络考试系统成为高校和培训机构的重要工具。传统在线…

深度Agent评测全攻略:LangChain团队分享5大核心评测模式

LangChain团队分享了评测深度Agent的五大核心模式&#xff1a;定制化测试逻辑、单步评测、完整Agent轮次、多轮次运行评测及正确环境设置。与传统LLM评测不同&#xff0c;深度Agent评测需关注轨迹、状态和工具调用。单步评测适合开发快速迭代&#xff0c;完整轮次适合回归测试&…

计算机深度学习毕设实战-python基于cnn卷积网络识别树叶是否存在病变

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【程序员必藏】2025最新RL×LLM技术全景扫描:从全生命周期到推理增强,附60+开源模型与30+训练框架

该文介绍2025年两篇关于强化学习(RL)与大语言模型(LLM)结合的最新技术综述。第一篇梳理了RL在LLM全生命周期(预训练、对齐、推理增强)的应用&#xff0c;重点解析RLVR技术&#xff1b;第二篇聚焦"大推理模型(LRM)"&#xff0c;探讨奖励设计、策略优化等核心问题&…

基于 Spring·Boot和 Vue 框架的校园快递代领系统设计与实现应用和研究

文章目录摘要项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着高校规模扩大和快递业务量激增&#xff0c;校园快递代领需求日益显著。基于Spring Boot…

深度学习计算机毕设之基于cnn卷积网络识别树叶是否存在病变人工智能

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Google发布!一文了解21种Agentic设计模式,非常详细收藏我这一篇就够了

介绍 由谷歌工程师Antonio Gulli撰写&#xff0c;关于构建智能系统的实战指南。全书系统性地总结了21种智能体设计模式&#xff0c;旨在帮助开发者构建可靠、高效的智能系统。结合LangChain、CrewAI、Google Agent Development Kit等主流框架提供代码示例&#xff0c;帮助读者将…