小红拿到了许多糖果,她希望吃掉一些糖果,但每种糖果至少需要留下一个作为收藏,即每种糖果都不能吃光。小红想知道,自己最多可以吃多少糖果。 输入描述:第一行输入一个正整数n,代表糖果的数量;第二行输入n个正整数so,代表糖果的种类。1<=n,ai<=100。 麻烦使用c++解决该问题
时间: 2024-03-23 12:39:39 浏览: 316
好的,这是一道典型的贪心算法题目。我们可以先将糖果种类按数量从小到大排序,然后从最小的一种糖果开始,每次吃掉其中的一个,直到无法再吃为止。接着再继续吃次小的糖果,直到全部都不能再吃为止。最后统计吃掉的糖果总数即可。
以下是C++代码实现:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n); // 按数量从小到大排序
int cnt = 0;
for (int i = 0; i < n - 1; i++) { // 从小到大依次吃掉每种糖果
cnt += a[i] - 1;
}
cnt += a[n - 1] - 1; // 最后一种糖果也要留一个
cout << cnt << endl;
return 0;
}
```
希望能解决你的问题!
阅读全文