目录
刷题汇总专栏:传送门!
1、游游的水果大礼包
1.1 题目
1.2 思路
读完题知道,将n个苹果和m个桃子按照一定的比例组成价值不同的一号或二号礼包,求组成礼包的最高价值。这里注意苹果或桃子没必要全用完,能用就用就好。
这题使用枚举来解,全选一号礼包,二号0个,然后一号减1,二号加1,直到2号全选。期间不断更新最大价值最后返回即可。
1.3 代码实现
#include<iostream>
using namespace std;
int main()
{
long long n,m,a,b;
cin >> n >> m >> a >> b;
long long ret = 0;
for(int x = 0;x <= min(n/2,m);x++)
{
int y = min(n-x*2,(m-x)/2);
ret = max(ret,a*x+b*y);
}
cout << ret << endl;
return 0;
}
2、买卖股票的最好时机
2.1 题目
2.2 思路
看完题目注意一点,我们可以反复买卖股票,不过在下一次购买前要把前一次的卖出。
观看示例,发现只要后面是涨就买,下降就卖,那么这样的利润就是最大的。
2.3 代码实现
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int arr[n];
for(int i=0;i < n;i++)
cin >> arr[i];
int sum = 0;
for(int i = 1;i < n;i++)
{
if(arr[i] - arr[i-1] > 0)
sum += arr[i] - arr[i-1];
}
cout << sum << endl;
return 0;
}
3、倒置字符串
3.1 题目
3.2 思路
这道题让我们逆置的是单词的位置,而不是字母顺序,所以我们可以现将整体逆序,再将每一个单词进行逆序,进行两次逆序,可以省去一下麻烦。
3.3 代码实现
注意:题目在并未说空格一定只有一个,也就是说两个单词间可能有多个空格
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
string str;
getline(cin,str);
reverse(str.begin(),str.end());
int left = 0,right = 0,n=str.size();
while(left < n)
{
right = left;
while(right < n &&str[right] != ' ')
right++;
reverse(str.begin()+left,str.begin()+right);
while(right < n && str[right] == ' ')
right++; //跳过空格
left = right;
}
cout << str << endl;
return 0;
}
本篇完,下篇见!