小猴有 n颗糖果,每颗糖果的重量依次为 w 1 , w 2 , … , w n 小猴现在想要把这些糖果分成若干份分,要求每份糖果中不能有两颗糖果的重量相同。 请你帮助小猴计算,最少能分成多少份糖果。用C++,给出完整代码,使用静态数组以及using namespace std
时间: 2024-10-02 12:03:03 浏览: 45
大班数学教案:小猴请客.doc
小猴要将n颗重量各不相同的糖果分成最少份数,这个问题可以转化为求解哈希集合(HashSet)中元素的数量,因为每增加一颗新的重量到集合中,就需要新开辟一份。在C++中,我们可以使用`unordered_set`容器来存储已见的不同糖果重量,并记录数量。
以下是使用C++的示例代码:
```cpp
#include <iostream>
#include <vector>
#include <unordered_set>
int minChunksToSort(int weights[], int n) {
// 使用无序集合(HashSet)来存储独特的糖果重量
std::unordered_set<int> uniqueWeights;
for (int i = 0; i < n; ++i) {
// 添加每个糖果的重量到集合中
uniqueWeights.insert(weights[i]);
}
// 返回集合的大小,即最少需要分成的份数
return uniqueWeights.size();
}
int main() {
int weights[] = {1, 2, 3, 4, 5}; // 糖果的重量数组
int n = sizeof(weights) / sizeof(weights[0]); // 数组长度
int minChunks = minChunksToSort(weights, n);
std::cout << "最少需要分成的份数是:" << minChunks << std::endl;
return 0;
}
```
阅读全文