题目如下截图:
思路:
第一步先 排序。这个大家都能想到。
第二步,三个为一组。首先看前三个 a1,a2,a3.
FIRST 如果a2-a1<=10&&a3-a2<=10 则符合要求,就从第4个开始,a4,a5,a6为一组;
SECOND 如果 a2-a1>10 && a2-a1<=20 则 数量+1,跳到第3个,a3,a,4,a5为一组;
THIRD 如果 a2-a1>20 则数量 +2;跳到第2 个,a2,a3,a4,为下一组;
FOURTH 如果 a2-a1<=10,a3-a2>10,则数量+1,跳到第3个,a3,a4,a5为下一组。
C++实现:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
vector<int> ivec;
int n,zou,count=0;
cin>>n;
for(int i=0;i<n;i++){
int tmp;
cin>>tmp;
ivec.push_back(tmp);
}
sort(ivec.begin(),ivec.end());
int sz=ivec.size();
for(zou=0;zou+2<sz;){
if(ivec[zou+1]-ivec[zou]>10&&ivec[zou+1]-ivec[zou]<=20){
count+=1;
zou+=2;
continue;
}
if(ivec[zou+1]-ivec[zou]>20){
count+=2;
++zou;
continue;
}
if(ivec[zou+1]-ivec[zou]<=10&&ivec[zou+2]-ivec[zou+1]>10){
count+=1;
zou+=2;
continue;
}
zou+=3;
}
if(sz-zou==2){
if(ivec[zou+1]-ivec[zou]<=10){
count+=1;
cout<<count<<endl;
}
if(ivec[zou+1]-ivec[zou]>10&&ivec[zou+1]-ivec[zou]<=20){
count+=1;
cout<<count<<endl;
}
if(ivec[zou+1]-ivec[zou]>20){
count+=4;
cout<<count<<endl;
}
}
if(sz-zou==1) {
count+=2;
cout<<count<<endl;
}
return 0;
}
结果: