分糖果游戏:最大糖果数 C++ 代码实现
分糖果游戏:最大糖果数 C++ 代码实现
题目描述 有三堆糖果,你想拿取尽可能多的糖果,但必须遵循以下规则:
- 从'a'堆中拿走 1 块糖果,同时从'b'堆中拿走 2 块糖果
- 从'b'堆中拿走 1 块糖果,同时从'c'堆中拿走 2 块糖果
输入格式 多组数据,第一行输入一个整数't',表示't'组数据。
接下来每组数据中, 输入 3 个整数 'a', 'b', 'c'。
输出格式 输出 't' 行,每行一个整数表示最大值。
样例
输入数据 1 3 5 3 2 3 4 5 1 0 5
输出数据 1 6 9 0
数据范围 1 <= t <= 100 1 <= a, b, c <= 100
C++ 代码
#include <iostream>
using namespace std;
int main() {
int t, a, b, c;
cin >> t;
while (t--) {
cin >> a >> b >> c;
int maxCandy = 0;
// 尽可能多地从 a 和 b 中拿糖果
maxCandy += min(a, b / 2) * 3; // 每次拿 1 个 a 和 2 个 b
a -= min(a, b / 2);
b -= min(a, b / 2) * 2;
// 尽可能多地从 b 和 c 中拿糖果
maxCandy += min(b, c / 2) * 3; // 每次拿 1 个 b 和 2 个 c
cout << maxCandy << endl;
}
return 0;
}
解释
代码首先读取输入的组数 't' 和每组数据的糖果数量 'a', 'b', 'c'。 然后,代码使用贪心算法,优先从 'a' 和 'b' 中拿糖果,因为每次操作可以获得 3 个糖果。 接着,代码从 'b' 和 'c' 中拿糖果,同样使用贪心算法,每次拿 3 个糖果。 最后,代码输出每组数据的最大糖果数。
优化
代码使用了 min() 函数来确保不会从某堆糖果中拿取超出其数量的糖果。
代码使用了 += 操作符来简化代码,提高效率。
代码使用了 endl 来结束输出,而不是使用 ,因为 endl 会刷新输出缓冲区,确保输出及时显示。
总结
这段代码使用贪心算法解决了分糖果游戏问题,能够高效地计算出最大糖果数。代码简洁易懂,可读性高,并进行了优化,提高了效率。
原文地址: https://www.cveoy.top/t/topic/oFIa 著作权归作者所有。请勿转载和采集!