充电总时间计算 | 豆包MarsCode AI刷题

71 阅读3分钟

问题描述

小R有nn部电脑,每部电脑的电池容量分别为aiai​。她可以使用两种不同的充电方式来给电脑充电:

  1. 普通充电:每单位时间为电脑充电xx单位的电量。
  2. 闪充:每单位时间为电脑充电4x4x单位的电量。

现在,所有电脑的电量都为零。小R希望使用闪充给所有电脑充满电,计算她需要的总充电时间。请保留结果的小数点后两位。


测试样例

样例1:

输入:n = 4 ,x = 1 ,a = [2, 3, 4, 5]
输出:'3.50'

样例2:

输入:n = 3 ,x = 2 ,a = [4, 6, 8]
输出:'2.25'

样例3:

输入:n = 2 ,x = 1 ,a = [10, 5]
输出:'3.75'

代码展示

#include <iostream>
#include <string>
#include <vector>

using namespace std;
string solution(int n, int x, vector<int> a) {
  double total_time = 0.0;
  for (int i = 0; i < n; ++i) {
    total_time += static_cast<double>(a[i]) / (4 * x);
  }
  // 格式化为两位小数
  stringstream result;
  result << fixed << setprecision(2) << total_time;
  return result.str();
}

int main() {
  cout << (solution(4, 1, {2, 3, 4, 5}) == "3.50") << endl;
  cout << (solution(3, 2, {4, 6, 8}) == "2.25") << endl;
  cout << (solution(2, 1, {10, 5}) == "3.75") << endl;
  return 0;
}

解题思路:

  1. 充电时间计算:每台电脑所需时间为 充电时间=电池容量4x\text{充电时间} = \frac{\text{电池容量}}{4x}充电时间=4x电池容量​。
  2. 总时间:将所有电脑的充电时间加总。
  3. 结果格式:按照要求保留两位小数。

代码详解

  1. 函数 solution:

    • 参数:int n(电脑数量),int x(普通充电速率),vector<int> a(每台电脑的电池容量)。
    • 功能:计算所有电脑使用闪充充满电所需的总时间,并返回格式化为两位小数的字符串。
  2. 核心逻辑:

    • 使用一个 for 循环遍历每台电脑的电池容量 a[i]
    • 计算每台电脑充满电所需的时间:static_cast<double>(a[i]) / (4 * x)
    • 将每台电脑的充电时间累加到 total_time 中。
    • 使用 stringstream 将 total_time 格式化为两位小数的字符串。
  3. 测试部分:

    • 在 main 函数中,调用 solution 函数并比较结果是否与预期输出一致。
    • 使用 cout 输出比较结果。
  4. 累加总时间

    cpp
    复制代码
    total_time += static_cast<double>(a[i]) / (4 * x);
    

    每台电脑的电池容量 a[i] 除以每单位时间的充电量 4x4x4x,得到该电脑的充满电时间,累加到总时间中。

  5. 格式化输出: 使用 stringstreamfixed << setprecision(2) 将结果保留两位小数。

  6. 返回字符串: 将结果从 stringstream 转为字符串后返回。

测试样例

样例 1:

输入:

cpp
复制代码
n = 4, x = 1, a = {2, 3, 4, 5}

计算:

总时间=24+34+44+54=0.5+0.75+1+1.25=3.50\text{总时间} = \frac{2}{4} + \frac{3}{4} + \frac{4}{4} + \frac{5}{4} = 0.5 + 0.75 + 1 + 1.25 = 3.50总时间=42​+43​+44​+45​=0.5+0.75+1+1.25=3.50

输出:

cpp
复制代码
"3.50"
样例 2:

输入:

cpp
复制代码
n = 3, x = 2, a = {4, 6, 8}

计算:

总时间=48+68+88=0.5+0.75+1=2.25\text{总时间} = \frac{4}{8} + \frac{6}{8} + \frac{8}{8} = 0.5 + 0.75 + 1 = 2.25总时间=84​+86​+88​=0.5+0.75+1=2.25

输出:

cpp
复制代码
"2.25"
样例 3:

输入:

cpp
复制代码
n = 2, x = 1, a = {10, 5}

计算:

总时间=104+54=2.5+1.25=3.75\text{总时间} = \frac{10}{4} + \frac{5}{4} = 2.5 + 1.25 = 3.75总时间=410​+45​=2.5+1.25=3.75

输出:

cpp
复制代码
"3.75"