用c++解决假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。 输入: 3 2 1 2 3 1 1 输出: 1 解释: 第1行 有两个数值,第1数值3 表示有3个孩子,第2数 2 表示有2块饼干; 第2行表示三个孩子,3个孩子的胃口值分别是:1,2,3。 第3行 表示你有两块小饼干,他们的尺寸都是1。 虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。 所以你应该输出
时间: 2023-11-22 13:56:35 浏览: 121
1234排三位数_c/C++_4个数排三位数_4321_
1。
这道题可以使用贪心算法来解决。具体思路是,我们先将孩子们和饼干的尺寸按照从小到大的顺序排序,然后从最小的孩子和最小的饼干开始匹配。如果当前的饼干大小正好能够满足当前孩子的胃口,那么就将这个饼干分配给这个孩子,并且考虑下一个孩子和下一个饼干。如果当前的饼干大小不能满足当前孩子的胃口,那么就考虑下一个饼干。
下面是使用 C++ 实现的代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int i = 0, j = 0;
int count = 0;
while (i < g.size() && j < s.size()) {
if (s[j] >= g[i]) {
count++;
i++;
}
j++;
}
return count;
}
int main() {
int n, m;
cin >> n >> m;
vector<int> g(n);
vector<int> s(m);
for (int i = 0; i < n; i++) {
cin >> g[i];
}
for (int i = 0; i < m; i++) {
cin >> s[i];
}
int ans = findContentChildren(g, s);
cout << ans << endl;
return 0;
}
```
输入格式为:第一行包含两个整数 n 和 m,表示孩子的数量和饼干的数量。第二行包含 n 个整数,表示每个孩子的胃口值。第三行包含 m 个整数,表示每个饼干的尺寸。输出格式为:一个整数,表示最多能满足的孩子数量。
例如,输入为:
```
3 2
1 2 3
1 1
```
则输出为:
```
1
```
阅读全文