C++实现:现在,神农从1~n依次有选择性地品尝各株草药(对于某株草药,神农选择品尝或者不品尝),问:在神农不休克的前提下,最多可以品尝多少株草药? 输入格式: 第一行输入一个正整数n(0≤n≤2×105),代表草药的总数。 第二行输入n个以空格隔开的整数,第i个整数ai代表第i株草药的功效。 输出格式: 在一行中输出一个整数,表示神农可以品尝草药的最大数目。
时间: 2023-12-10 10:38:30 浏览: 76
这道题可以使用贪心算法来解决,每次选择功效最大的草药。
具体实现如下:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 2e5 + 10;
int n;
int a[N];
int main()
{
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n); // 将草药按照功效从小到大排序
int res = 0; // 记录神农品尝的草药数量
for(int i = 0; i < n; i++)
{
if(a[i] > res + 1) // 如果当前草药的功效大于神农已经品尝的草药数量加上1,则无法再品尝
break;
res++; // 否则神农品尝该草药
}
cout << res << endl;
return 0;
}
```
时间复杂度为O(nlogn),主要是排序的复杂度。
相关问题
C++:以调用函数的形式实现1~n的累加器,并在main函数中,计算1~1024的累加结果
可以使用如下代码实现:
#include <stdio.h>
int accumulator(int n) {
if (n == 1) {
return 1;
} else {
return n + accumulator(n-1);
}
}
int main() {
int result = accumulator(1024);
printf("1~1024的累加结果为:%d\n", result);
return ;
}
输出结果为:1~1024的累加结果为:524800
c++实现求从 n 个不同的数中取r 个数的所有选择的个数的代码
以下是 C 语言实现从 n 个不同的数中取 r 个数的所有选择的个数的代码:
```c
#include <stdio.h>
int factorial(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
int combination(int n, int r) {
return factorial(n) / (factorial(r) * factorial(n - r));
}
int main() {
int n = 5;
int r = 3;
int result = combination(n, r);
printf("从 %d 个不同的数中取 %d 个数的所有选择的个数为 %d\n", n, r, result);
return 0;
}
```
输出结果为:
```
从 5 个不同的数中取 3 个数的所有选择的个数为 10
```
希望能够帮助到您!