华为OD机试新系统真题【计算电动车续航里程】

发布时间:2026/8/3 14:10:51
华为OD机试新系统真题【计算电动车续航里程】 计算电动车续航里程(C/C/Py/Java/Js/Go)题解华为OD机试新系统真题 华为OD上机考试新系统真题 8月2号 100分题型华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录机考题库 算法考点详解题目内容给定电动车的电池容量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 20 \le \text{capacity} \le 20020≤capacity≤200非整数需向下取整标准能耗效率范围5 ≤ efficiency ≤ 30 5 \le \text{efficiency} \le 305≤efficiency≤30驾驶场景仅支持“city”城市0/场景修正系数kc0 1 \text{kc0}1kc01、“highway”高速1/场景修正系数kc1 0.92 \text{kc1}0.92kc10.92、“mountain”山路2/场景修正系数kc2 0.85 \text{kc2}0.85kc20.85结果要求有效续航里程需四舍五入为整数输出里程km。输入描述输入为一行包含三个值电池容量可能含小数、能耗效率可能含小数、驾驶场景整数0/1/2以逗号分隔。输出描述输出一个整数表示四舍五入后的有效续航里程单位km。样例1输入75.8 14.3 1输出438说明电池容量向下取整75.8 → 75 75.8 \rightarrow 7575.8→75能耗效率14.3 14.314.3零段电池容量capacity 160 kWh \text{capacity}160\text{kWh}capacity160kWh时kp0 1 \text{kp0}1kp01无损耗75 7575不在此段内电池容量等效为0 ∗ 1 0*10∗1一段电池容量160 kWh capacity 80 kWh 160\text{kWh}\text{capacity}80\text{kWh}160kWhcapacity80kWh时kp1 0.98 \text{kp1}0.98kp10.9875 7575不在此段内电池容量等效为0 ∗ 0.98 0*0.980∗0.98二段电池容量capacity 80 kWh \text{capacity}80\text{kWh}capacity80kWh时kp2 0.95 \text{kp2}0.95kp20.9575 7575在此段内电池容量等效为75 ∗ 0.95 75*0.9575∗0.95理论里程 ( 0 ∗ 1 0 ∗ 0.98 75 ∗ 0.95 ) / 14.3 ∗ 100 498.2517 km (0*10*0.9875*0.95)/14.3*100498.2517\text{km}(0∗10∗0.9875∗0.95)/14.3∗100498.2517km(保留4 44位)总体损耗系数计算0.956 0.9560.956基础∗ 0.92 * 0.92∗0.92高速 0.8795 0.87950.8795(保留4 44位)里程 498.2517 ∗ 0.8795 438.2124126 498.2517*0.8795438.2124126498.2517∗0.8795438.2124126四舍五入后的有效里程 438 438438样例2输入135.1 12.3 2输出858说明电池容量向下取整135.1 → 135 135.1 \rightarrow 135135.1→135能耗效率12.3 12.312.3零段电池容量capacity 160 kWh \text{capacity}160\text{kWh}capacity160kWh时kp0 1 \text{kp0}1kp01无损耗135 135135不在此段内电池容量等效为0 ∗ 1 0*10∗1一段电池容量160 kWh capacity 80 kWh 160\text{kWh}\text{capacity}80\text{kWh}160kWhcapacity80kWh时kp1 0.98 \text{kp1}0.98kp10.98135 135135在此段内电池容量等效为( 135 − 80 ) ∗ 0.98 (135-80)*0.98(135−80)∗0.98二段电池容量capacity 80 kWh \text{capacity}80\text{kWh}capacity80kWh时kp2 0.95 \text{kp2}0.95kp20.95剩余的电池容量80 8080在此段内电池容量等效为80 ∗ 0.95 80*0.9580∗0.95理论里程 ( 0 ∗ 1 ( 135 − 80 ) ∗ 0.98 80 ∗ 0.95 ) / 12.3 ∗ 100 1056.0976 km (0*1(135-80)*0.9880*0.95)/12.3*1001056.0976\text{km}(0∗1(135−80)∗0.9880∗0.95)/12.3∗1001056.0976km(保留4 44位)总体损耗系数0.956 0.9560.956基础∗ 0.85 * 0.85∗0.85山地 0.8126 0.81260.8126(保留4 44位)里程 1056.0976 ∗ 0.8126 858.1840908 1056.0976*0.8126858.18409081056.0976∗0.8126858.1840908四舍五入后的有效里程 858 858858题解思路模拟将电池容量向下取整分段计算每一段能耗修正数得到能耗修正数总和。依照公式理论续航里程 (电池容量 * 容量能耗修正系数) / 能耗效率 * 100得到理论续航里程并四舍五入保留4位小数。计算总体损耗系数按照公式基础损耗系数为 kb (0.956) * 场景修正系数 kc四舍五入保留4位小数总体损耗系数 * 理论续航里程计算实际里程并四舍五入保留整数。c#includebits/stdc.husingnamespacestd;intsolve(doublecapacity,doubleefficiency,inttype){// 向下取整intrealCapacity(int)floor(capacity);// 计算每一段能耗修正数doubleseg0max(0,realCapacity-160)*1.0;doubleseg1max(0,min(realCapacity,160)-80)*0.98;doubleseg2min(realCapacity,80)*0.95;doublecoefficientseg0seg1seg2;// 计算理论续航里程doubletheoryDistancecoefficient/efficiency*100;// 四舍五入保留4位小数theoryDistanceround(theoryDistance*10000)/10000.0;doublekc[3]{1.0,0.92,0.85};// 计算总体损耗系数 并保留4位小数doublekdround(0.956*kc[type]*10000)/10000.0;// 有效续航里程 并四舍五入保留正数returnround(theoryDistance*kd);}intmain(){doublecapacity,efficiency;inttype;cincapacityefficiencytype;coutsolve(capacity,efficiency,type);return0;}Javaimportjava.util.*;publicclassMain{staticintsolve(doublecapacity,doubleefficiency,inttype){// 向下取整intrealCapacity(int)Math.floor(capacity);// 计算每一段能耗修正数doubleseg0Math.max(0,realCapacity-160)*1.0;doubleseg1Math.max(0,Math.min(realCapacity,160)-80)*0.98;doubleseg2Math.min(realCapacity,80)*0.95;doublecoefficientseg0seg1seg2;// 计算理论续航里程doubletheoryDistancecoefficient/efficiency*100;// 四舍五入保留4位小数theoryDistanceMath.round(theoryDistance*10000)/10000.0;double[]kc{1.0,0.92,0.85};// 计算总体损耗系数 并保留4位小数doublekdMath.round(0.956*kc[type]*10000)/10000.0;// 有效续航里程 并四舍五入保留正数return(int)Math.round(theoryDistance*kd);}publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);doublecapacitysc.nextDouble();doubleefficiencysc.nextDouble();inttypesc.nextInt();System.out.println(solve(capacity,efficiency,type));sc.close();}}Pythonimportmathdefsolve(capacity,efficiency,type):# 向下取整real_capacityint(math.floor(capacity))# 计算每一段能耗修正数seg0max(0,real_capacity-160)*1.0seg1max(0,min(real_capacity,160)-80)*0.98seg2min(real_capacity,80)*0.95coefficientseg0seg1seg2# 计算理论续航里程theory_distancecoefficient/efficiency*100# 四舍五入保留4位小数theory_distanceround(theory_distance,4)kc[1.0,0.92,0.85]# 计算总体损耗系数 并保留4位小数kdround(0.956*kc[type],4)# 有效续航里程 并四舍五入保留正数returnround(theory_distance*kd)if__name____main__:capacity,efficiency,typeinput().split()capacityfloat(capacity)efficiencyfloat(efficiency)typeint(type)print(solve(capacity,efficiency,type))JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});rl.on(line,function(line){letarrline.trim().split(/\s/);letcapacityNumber(arr[0]);letefficiencyNumber(arr[1]);lettypeNumber(arr[2]);functionsolve(capacity,efficiency,type){// 向下取整letrealCapacityMath.floor(capacity);// 计算每一段能耗修正数letseg0Math.max(0,realCapacity-160)*1.0;letseg1Math.max(0,Math.min(realCapacity,160)-80)*0.98;letseg2Math.min(realCapacity,80)*0.95;letcoefficientseg0seg1seg2;// 计算理论续航里程lettheoryDistancecoefficient/efficiency*100;// 四舍五入保留4位小数theoryDistanceMath.round(theoryDistance*10000)/10000.0;letkc[1.0,0.92,0.85];// 计算总体损耗系数 并保留4位小数letkdMath.round(0.956*kc[type]*10000)/10000.0;// 有效续航里程 并四舍五入保留正数returnMath.round(theoryDistance*kd);}console.log(solve(capacity,efficiency,type));rl.close();});Gopackagemainimport(bufiofmtmathos)funcsolve(capacityfloat64,efficiencyfloat64,typint)int{// 向下取整realCapacity:int(math.Floor(capacity))// 计算每一段能耗修正数seg0:math.Max(0,float64(realCapacity-160))*1.0seg1:math.Max(0,math.Min(float64(realCapacity),160)-80)*0.98seg2:math.Min(float64(realCapacity),80)*0.95coefficient:seg0seg1seg2// 计算理论续航里程theoryDistance:coefficient/efficiency*100// 四舍五入保留4位小数theoryDistancemath.Round(theoryDistance*10000)/10000.0kc:[]float64{1.0,0.92,0.85}// 计算总体损耗系数 并保留4位小数kd:math.Round(0.956*kc[typ]*10000)/10000.0// 有效续航里程 并四舍五入保留正数returnint(math.Round(theoryDistance*kd))}funcmain(){in:bufio.NewReader(os.Stdin)varcapacity,efficiencyfloat64vartypintfmt.Fscan(in,capacity,efficiency,typ)fmt.Println(solve(capacity,efficiency,typ))}C语言#includestdio.h#includemath.hintsolve(doublecapacity,doubleefficiency,inttype){// 向下取整intrealCapacity(int)floor(capacity);// 计算每一段能耗修正数doubleseg0fmax(0,realCapacity-160)*1.0;doubleseg1fmax(0,fmin(realCapacity,160)-80)*0.98;doubleseg2fmin(realCapacity,80)*0.95;doublecoefficientseg0seg1seg2;// 计算理论续航里程doubletheoryDistancecoefficient/efficiency*100;// 四舍五入保留4位小数theoryDistanceround(theoryDistance*10000)/10000.0;doublekc[3]{1.0,0.92,0.85};// 计算总体损耗系数 并保留4位小数doublekdround(0.956*kc[type]*10000)/10000.0;// 有效续航里程 并四舍五入保留正数return(int)round(theoryDistance*kd);}intmain(){doublecapacity,efficiency;inttype;scanf(%lf %lf %d,capacity,efficiency,type);printf(%d,solve(capacity,efficiency,type));return0;}