问题描述
小R有nn部电脑,每部电脑的电池容量分别为aiai。她可以使用两种不同的充电方式来给电脑充电:
- 普通充电:每单位时间为电脑充电xx单位的电量。
- 闪充:每单位时间为电脑充电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;
}
解题思路:
- 充电时间计算:每台电脑所需时间为 充电时间=电池容量4x\text{充电时间} = \frac{\text{电池容量}}{4x}充电时间=4x电池容量。
- 总时间:将所有电脑的充电时间加总。
- 结果格式:按照要求保留两位小数。
代码详解
-
函数
solution:- 参数:
int n(电脑数量),int x(普通充电速率),vector<int> a(每台电脑的电池容量)。 - 功能:计算所有电脑使用闪充充满电所需的总时间,并返回格式化为两位小数的字符串。
- 参数:
-
核心逻辑:
- 使用一个
for循环遍历每台电脑的电池容量a[i]。 - 计算每台电脑充满电所需的时间:
static_cast<double>(a[i]) / (4 * x)。 - 将每台电脑的充电时间累加到
total_time中。 - 使用
stringstream将total_time格式化为两位小数的字符串。
- 使用一个
-
测试部分:
- 在
main函数中,调用solution函数并比较结果是否与预期输出一致。 - 使用
cout输出比较结果。
- 在
-
累加总时间:
cpp 复制代码 total_time += static_cast<double>(a[i]) / (4 * x);每台电脑的电池容量
a[i]除以每单位时间的充电量 4x4x4x,得到该电脑的充满电时间,累加到总时间中。 -
格式化输出: 使用
stringstream和fixed << setprecision(2)将结果保留两位小数。 -
返回字符串: 将结果从
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"