楼主想的有点复杂了。我来说一说我的思路。AC了的。 第一步先 排序。这个大家都能想到。 第二步,三个为一组。首先看前三个 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为下一组。。。。 #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { int n; while(cin>>n) { vector<int> ivec; for(int i=0;i!=n;++i) { int temp; cin>>temp; ivec.push_back(temp); } sort(ivec.begin(),ivec.end()); int sz=ivec.size(); int count=0; int zou; for(zou=0;zou+2<sz;) { if(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; zou+=2; continue; } zou+=3; } } if(sz-zou==2) { if(ivec[zou+1]-ivec[zou]<=10) { count+=1; cout<<count<<endl; break; } if(ivec[zou+1]-ivec[zou]>10&&ivec[zou+1]-ivec[zou]<=20) { count+=1; cout<<count<<endl; break; } if(ivec[zou+1]-ivec[zou]>20) { count+=4; cout<<count<<endl; break; } } if(sz-zou==1) { count+=2; } cout<<count<<endl; } }
点赞 5

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务