电池充电时间计算
2026 华为OD机试真题8月16日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
电池充电过程并非恒定电流,而是遵循一定的充电曲线。给定电池容量、当前电量百分比、目标电量百分比和充电器最大输出电流,请计算充电至目标电量所需的时间。
充电曲线规则如下:
- 当电量 <20% 时,采用预充模式,电流为最大电流的 20%
- 当电量 >=20% 且 <80% 时,采用恒流模式,电流为最大电流的 100%
- 当电量 >=80% 时,采用恒压模式,电流随电量增加而线性衰减:
电流计算公式:
current(soc) = maxCurrent * (1 - (soc - 80) * 0.045)
- 其中 soc 为电量百分比,该公式保证 current(80)=maxCurrent,current(100)=maxCurrent*0.1
- 每充入 batteryCapacity*1% 的电量,根据当前电量所在阶段确定该步进的充电电流,然后累加该步进所需的时间。由于恒压阶段电流线性变化,可使用平均电流法计算充电时间:平均电流 = (起始电流 + 结束电流) / 2。
2026 华为OD机试真题8月16日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
输入描述
batteryCapacity: 电池容量(mAh),整型,范围 1000~10000maxCurrent: 充电器最大输出电流(mA),整型,范围 500~10000initialSOC: 当前电量百分比(0~100 的整数),整型targetSOC: 目标电量百分比(initialSOC~100 的整数),整型
输入为一行,四个整数使用英文逗号分隔:
batteryCapacity,maxCurrent,initialSOC,targetSOC
输出描述
充电至目标电量所需的时间,浮点数,保留一位小数(四舍五入)。
示例1
输入
3000,1500,0,100
输出
3.9
说明
从
0%充电到100%:
预充阶段(
0%~20%):电流 = 1500*20%=300 mA
- 需要充入
20%电量 = 600 mAh- 预充时间:600/300=2.0 小时
恒流阶段(
20%~80%):电流 = 1500 mA
- 需要充入
60%电量 = 1800 mAh- 恒流时间:1800/1500=1.2 小时
恒压阶段(
80%~100%):电流从 1500 mA 线性降至 150 mA
- 需要充入
20%电量 = 600 mAh- 平均电流 = (1500+150)/2=825 mA
- 恒压时间:600/825≈0.73 小时
总时间:2.0+1.2+0.73=3.93,四舍五入保留一位小数:
3.9
示例2
输入
3000,1500,70,85
输出
0.3
说明
从
70%充电到85%:
恒流阶段(
70%~80%):电流 = 1500 mA
- 需要充入
10%电量 = 300 mAh- 恒流时间:300/1500=0.2 小时
恒压阶段(
80%~85%):电流从 1500 mA 线性降至 1162.5 mA
- 需要充入
5%电量 = 150 mAh- 平均电流 = (1500+1162.5)/2=1331.25 mA
- 恒压时间:150/1331.25=0.11 小时
总时间:0.2+0.11=0.31,四舍五入保留一位小数:
0.3
解题思路
核心思想
充电曲线只有三个区间:0~20、20~80、80~100。
因此不需要逐个百分比模拟,只需要计算目标区间和这三个充电阶段的交集。每个阶段分别计算充入容量、电流或平均电流,再把耗时累加即可。
算法步骤
- 如果当前电量已经达到目标电量,直接输出
0.0。 - 若充电区间经过
0~20,按0.2 * maxCurrent计算预充耗时。 - 若充电区间经过
20~80,按maxCurrent计算恒流耗时。 - 若充电区间经过
80~100,使用线性衰减电流的起止电流求平均电流,再计算耗时。 - 最后将总耗时四舍五入保留一位小数输出。
复杂度分析
- 时间复杂度:
O(1) - 空间复杂度:`O