AVRIL_START_JANCOKALIVEAVRIL_END_JANCOK Interactive Terminal

Command Executor

电池充电时间计算 - 魔改工程师

电池充电时间计算

2026 华为OD机试真题8月16日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

电池充电过程并非恒定电流,而是遵循一定的充电曲线。给定电池容量、当前电量百分比、目标电量百分比和充电器最大输出电流,请计算充电至目标电量所需的时间。

充电曲线规则如下:

  1. 当电量 <20% 时,采用预充模式,电流为最大电流的 20%
  2. 当电量 >=20% 且 <80% 时,采用恒流模式,电流为最大电流的 100%
  3. 当电量 >=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~10000
  • maxCurrent: 充电器最大输出电流(mA),整型,范围 500~10000
  • initialSOC: 当前电量百分比(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~2020~8080~100

因此不需要逐个百分比模拟,只需要计算目标区间和这三个充电阶段的交集。每个阶段分别计算充入容量、电流或平均电流,再把耗时累加即可。

算法步骤

  1. 如果当前电量已经达到目标电量,直接输出 0.0
  2. 若充电区间经过 0~20,按 0.2 * maxCurrent 计算预充耗时。
  3. 若充电区间经过 20~80,按 maxCurrent 计算恒流耗时。
  4. 若充电区间经过 80~100,使用线性衰减电流的起止电流求平均电流,再计算耗时。
  5. 最后将总耗时四舍五入保留一位小数输出。

复杂度分析

  • 时间复杂度:O(1)
  • 空间复杂度:`O
THE END