8.2华为OD机试真题 新系统 - 计算电动车续航里程 (Java/Py/C/C++/Js/Go)

📅 2026/8/4 4:02:13
8.2华为OD机试真题 新系统 - 计算电动车续航里程 (Java/Py/C/C++/Js/Go)
计算电动车续航里程2026 华为OD机试真题 8月2日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述给定电动车的电池容量capacitykWh、能耗效率efficiencykWh/100km、驾驶场景城市 / 高速 / 山路int类型分别是0/1/2计算该车的有效续航里程km。核心公式理论续航里程 (电池容量 * 容量能耗修正系数) / 能耗效率 *100结果按四舍五入保留4位小数有效续航里程 理论续航里程 * 总体损耗系数 相关系数计算规则如下容量能耗修正数 Kp不同容量下能效效率不同分段进行能效效率修正零段电池容量capacity160kWh时kp0 1(无损耗)一段电池容量160kWhcapacity80kWh时kp1 0.98二段电池容量capacity80kWh时kp2 0.95总体损耗系数 kd基础损耗系数为kb (0.956)* 场景修正系数kc结果按四舍五入保留4位小数补充约束电池容量范围20≤capacity≤200 非整数需向下取整标准能耗效率范围5≤efficiency≤30驾驶场景仅支持“city”城市0/场景修正系数 kc01、“highway”高速1/场景修正系数 kc10.92、“mountain”山路2/场景修正系数 kc20.85结果要求有效续航里程需四舍五入为整数输出里程km。输入描述输入为一行包含三个值电池容量可能含小数、能耗效率可能含小数、驾驶场景整数0/1/2以逗号分隔。输出描述输出一个整数表示四舍五入后的有效续航里程单位km。示例1输入75.8,14.3,1输出438说明电池容量向下取整75.8→75能耗效率14.3零段电池容量 capacity160kWh 时kp01无损耗75 不在此段内电池容量等效为 0∗1一段电池容量 160kWhcapacity80kWh 时kp10.98 75 不在此段内电池容量等效为 0∗0.98二段电池容量 capacity80kWh 时kp20.95 75 在此段内电池容量等效为 75∗0.95理论里程 (0∗10∗0.9875∗0.95)/14.3∗100498.2517km(保留 4 位)总体损耗系数计算0.956基础∗0.92高速0.8795(保留 4 位)里程 498.2517∗0.8795438.2124126四舍五入后的有效里程 438示例2输入135.1,12.3,2输出858说明电池容量向下取整135.1→135能耗效率12.3零段电池容量 capacity160kWh 时kp01无损耗135 不在此段内电池容量等效为 0∗1一段电池容量 160kWhcapacity80kWh 时kp10.98 135 在此段内电池容量等效为 (135−80)∗0.98二段电池容量 capacity80kWh 时kp20.95 剩余的电池容量 80 在此段内电池容量等效为 80∗0.95理论里程 (0∗1(135−80)∗0.9880∗0.95)/12.3∗1001056.0976km(保留 4 位)总体损耗系数0.956基础∗0.85山地0.8126(保留 4 位)里程 1056.0976∗0.8126858.1840908四舍五入后的有效里程 858解题思路核心思想题目给出了明确公式关键是按容量分段计算等效电池容量并在指定位置进行四舍五入。电池容量需要先向下取整。取整后的容量最多分成三段前80kWh按0.95折算80~160kWh部分按0.98折算超过160kWh的部分按1.0折算。得到等效容量后计算理论续航再乘以总体损耗系数最后四舍五入为整数。算法步骤按示例格式读取一行输入用英文逗号切分出capacity、efficiency、scene。将capacity向下取整为整数c。按容量分段计算等效容量c 80c * 0.9580 c 16080 * 0.95 (c - 80) * 0.98c 16080 * 0.95 80 * 0.98 (c - 160) * 1.0计算理论续航equivalentCapacity / efficiency * 100四舍五入保留 4 位小数。根据scene选择场景系数kc计算kd 0.956 * kc四舍五入保留 4 位小数。输出theoreticalRange * kd四舍五入后的整数。正确性说明算法先对容量向下取整符合题目对非整数容量的要求。随后按照三个容量区间分别累加等效容量覆盖了所有可能的容量范围且每一段的修正系数与题目一致。理论续航和总体损耗系数都在题目要求的位置保留 4 位小数最后再对有效续航进行整数四舍五入。因此算法输出与题目公式完全一致。复杂度分析本题只进行常数次计算。时间复杂度O(1)。空间复杂度O(1)。Javaimportjava.util.Scanner;publicclassMain{staticdoubleround4(doublevalue){returnMath.floor(value*10000.00.5)/10000.0;}staticintsolve(doublecapacity,doubleefficiency,intscene){// 电池容量先向下取整再按三个容量区间累加等效容量intc(int)Math.floor(capacity);doubleequivalentCapacity;if(c160){equivalentCapacity(c-160)80*0.9880*0.95;}elseif(c80){equivalentCapacity(c-80)*0.9880*0.95;}else{equivalentCapacityc*0.95;}// 理论续航和总体损耗系数都按题目要求保留 4 位小数doubletheoreticalRangeround4(equivalentCapacity/efficiency*100.0);double[]sceneFactors{1.0,0.92,0.85};doublekdround4(0.956*sceneFactors[scene]);// 有效续航最终四舍五入为整数return(int)Math.floor(theoreticalRange*kd0.5);}publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);Stringlinescanner.hasNextLine()?scanner.nextLine().trim():;String[]partsline.split(,);doublecapacityDouble.parseDouble(parts[0].trim());doubleefficiencyDouble.parseDouble(parts[1].trim());intsceneInteger.parseInt(parts[2].trim());System.out.println(solve(capacity,efficiency,scene));}}Pythonimportmathdefround4(value):returnmath.floor(value*100000.5)/10000defsolve(capacity,efficiency,scene):# 电池容量先向下取整再分段计算等效容量cmath.floor(capacity)ifc160:equivalent_capacity(c-160)80*0.9880*0.95elifc80:equivalent_capacity(c-80)*0.9880*0.95else:equivalent_capacityc*0.95# 理论续航和损耗系数都需要保留 4 位小数theoretical_rangeround4(equivalent_capacity/efficiency*100.0)scene_factors[1.0,0.92,0.85]kdround4(0.956*scene_factors[scene])# 最终有效续航四舍五入为整数returnmath.floor(theoretical_range*kd0.5)lineinput().strip()capacity_str,efficiency_str,scene_strline.split(,)print(solve(float(capacity_str),float(efficiency_str),int(scene_str)))JavaScriptconstreadlinerequire(readline);functionround4(value){returnMath.floor(value*100000.5)/10000;}functionsolve(capacity,efficiency,scene){// 电池容量向下取整后根据区间累加等效容量constcMath.floor(capacity);letequivalentCapacity;if(c160){equivalentCapacity(c-160)80*0.9880*0.95;}elseif(c80){equivalentCapacity(c-80)*0.9880*0.95;}else{equivalentCapacityc*0.95;}// 理论续航和总体损耗系数按题目保留 4 位小数consttheoreticalRangeround4(equivalentCapacity/efficiency*100.0);constsceneFactors[1.0,0.92,0.85];constkdround4(0.956*sceneFactors[scene]);// 有效续航最终四舍五入为整数returnMath.floor(theoreticalRange*kd0.5);}constrlreadline.createInterface({input:process.stdin,output:process.stdout,terminal:false});letline;rl.on(line,(input){lineinput.trim();});rl.on(close,(){constpartsline.split(,);console.log(solve(Number(parts[0]),Number(parts[1]),Number(parts[2])));});C#includecmath#includeiostream#includesstream#includestring#includevectorusingnamespacestd;doubleround4(doublevalue){returnfloor(value*10000.00.5)/10000.0;}intsolve(doublecapacity,doubleefficiency,intscene){// 容量向下取整然后按分段系数计算等效容量intc(int)floor(capacity);doubleequivalentCapacity;if(c160){equivalentCapacity(c-160)80*0.9880*0.95;}elseif(c80){equivalentCapacity(c-80)*0.9880*0.95;}else{equivalentCapacityc*0.95;}// 理论续航和总体损耗系数按要求保留 4 位小数doubletheoreticalRangeround4(equivalentCapacity/efficiency*100.0);doublesceneFactors[3]{1.0,0.92,0.85};doublekdround4(0.956*sceneFactors[scene]);// 最终里程四舍五入为整数return(int)floor(theoreticalRange*kd0.5);}intmain(){string line;getline(cin,line);stringstreamss(line);string item;vectorstringparts;while(getline(ss,item,,)){parts.push_back(item);}coutsolve(stod(parts[0]),stod(parts[1]),stoi(parts[2]))endl;return0;}Gopackagemainimport(bufiofmtmathosstrconvstrings)funcround4(valuefloat64)float64{returnmath.Floor(value*100000.5)/10000}funcsolve(capacityfloat64,efficiencyfloat64,sceneint)int{// 容量向下取整后按容量区间计算等效容量c:int(math.Floor(capacity))equivalentCapacity:0.0ifc160{equivalentCapacityfloat64(c-160)80*0.9880*0.95}elseifc80{equivalentCapacityfloat64(c-80)*0.9880*0.95}else{equivalentCapacityfloat64(c)*0.95}// 理论续航和总体损耗系数都保留 4 位小数theoreticalRange:round4(equivalentCapacity/efficiency*100.0)sceneFactors:[]float64{1.0,0.92,0.85}kd:round4(0.956*sceneFactors[scene])// 有效续航四舍五入为整数returnint(math.Floor(theoreticalRange*kd0.5))}funcmain(){scanner:bufio.NewScanner(os.Stdin)line:ifscanner.Scan(){linestrings.TrimSpace(scanner.Text())}parts:strings.Split(line,,)capacity,_:strconv.ParseFloat(strings.TrimSpace(parts[0]),64)efficiency,_:strconv.ParseFloat(strings.TrimSpace(parts[1]),64)scene,_:strconv.Atoi(strings.TrimSpace(parts[2]))fmt.Println(solve(capacity,efficiency,scene))}C语言#includemath.h#includestdio.h#includestdlib.h#includestring.hdoubleround4(doublevalue){returnfloor(value*10000.00.5)/10000.0;}intsolve(doublecapacity,doubleefficiency,intscene){// 容量向下取整然后按三段容量系数累加等效容量intc(int)floor(capacity);doubleequivalentCapacity;if(c160){equivalentCapacity(c-160)80*0.9880*0.95;}elseif(c80){equivalentCapacity(c-80)*0.9880*0.95;}else{equivalentCapacityc*0.95;}// 理论续航和总体损耗系数按题目保留 4 位小数doubletheoreticalRangeround4(equivalentCapacity/efficiency*100.0);doublesceneFactors[3]{1.0,0.92,0.85};doublekdround4(0.956*sceneFactors[scene]);// 最终结果四舍五入为整数return(int)floor(theoreticalRange*kd0.5);}intmain(){charline[200];if(fgets(line,sizeof(line),stdin)NULL){return0;}char*capacityStrstrtok(line,,);char*efficiencyStrstrtok(NULL,,);char*sceneStrstrtok(NULL,,);doublecapacityatof(capacityStr);doubleefficiencyatof(efficiencyStr);intsceneatoi(sceneStr);printf(%d\n,solve(capacity,efficiency,scene));return0;}完整用例用例175.8,14.3,1用例2135.1,12.3,2用例380,10,0用例480.9,10,1用例5160,20,0用例6160.9,20,2用例7200,15.5,1用例820.5,5,0用例9199.9,30,2用例10120.7,18.6,1文章目录**计算电动车续航里程**题目描述补充约束输入描述输出描述示例1示例2解题思路核心思想算法步骤正确性说明复杂度分析JavaPythonJavaScriptCGoC语言完整用例用例1用例2用例3用例4用例5用例6用例7用例8用例9用例10