没理解题目,将i每次设为加3,但是当这个不成立时,应该要尝试下一个字符
题目要我们输出字符串中小蓝喜欢的单词数
那这道题要用一个变量来记录共有几个小蓝喜欢的单词数,所以我们首先先遍历字符串s但是这里i每次只加1,因为这个默认的是没找的情况,后面改一下就可以了。
那么在循环内,我们只要先判断是否为小蓝喜欢的单词,如果是的话不光小蓝喜欢的单词数要加1,同时我们已经分割完了,所以下一个就不是从i+1开始了,是从i+3开始,所以i就加上2(算上i原本加的,所以是加3-1)
最终输出cnt
1.分割完后如何从当前点跳到下一个点
2.如何截取单词
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
int cnt=0;
cin>>s;
for(int i=0;i<s.size()-3+1;i++)
{
if(s.substr(i,3)=="lqb" || s.substr(i,3)=="lbq" || s.substr(i,3)=="qlb" || s.substr(i,3)=="qbl" || s.substr(i,3)=="blq" || s.substr(i,3)=="bql")//用substr函数来截取单词从而判断是否为小蓝喜欢的单词
{
cnt++;
i+=2;//已经分割完了,所以下一个应该是i+3开始了
}
}
cout<<cnt;//输出
return 0;
}
思路不对,我的思路是从大到小排序后只要能装就一直装,但是虽然将最大的给装下了,但是不一定就最大价值
题目要我们输出的是最大价值,注意不是宝箱数量
其实这道题可以用前缀和的思路来完成,在输入a[i]并排序后,我们就可以求前缀和了
接下来我们再用双重循环来枚举a[i]以及a[j],当两个数满足差小于等于k我们就可以打擂台了(这里要注意的一点是只要满足条件,整个这之间的宝箱都可以拿走了,因为它们肯定满足差小于等于k)
最终输出我们能取走的宝箱的总价值的最大值
能考虑到当a[i]与a[j]满足条件,整个这之间的宝箱都可以拿走了这一点
#include <bits/stdc++.h>
using namespace std;
int a[1005],sum[1005];
int main()
{
int n,k;
int maxn=0;
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1);//从小到大排序
for(int i=1;i<=n;i++)
{
sum[i]=sum[i-1]+a[i];//必须在这里操作,不然顺序就会乱,因为中途排了序
}
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
if(a[j]-a[i]<=k)//必须满足条件
{
maxn=max(maxn,sum[j]-sum[i-1]);//打擂台
}
}
}
cout<<maxn;
return 0;
}