排序题型
Posted area-h-p
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序题型相关的知识,希望对你有一定的参考价值。
题目如下
输入输出样例
由于给出的题目难度是不定序的,所以第一步要先对其从小到大排序,然后比较从头到尾两两做差,差值小于等于10的放入vector中,当vector的大小为3时则说明其满足一组题目,置空vector,当其差值大于10时,用3(每组应有的题目总数)减去vector的大小就得到本组题目还需要的题目数量。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int func(int nu)
{
vector<int> v, u;
int a,res = 0;
for(int i=0; i<nu; ++i)//得到题目难度序列
{
cin>>a;
v.push_back(a);
}
::sort(v.begin(), v.end());//排序
vector<int>::iterator it = v.begin();
while(it != v.end())//这里由于内部循环也会对it指针进行更改,所以不可以用for的计数来设置循环次数
{
u.push_back(*it);
while(u.size() < 3)//够一组题目停下
{
if(abs((*it-*(it+1))) <= 10)//这里用差值的绝对值,因为题目中并没有说难度不可以为负数(防止例如 -100 -(-1)= -99)
{
u.push_back(*(it+1));
++it;
}
else//
{
++it;
break;
}
}
if(u.size() == 3)//当满一组题目时指针it还指向符合题意一组题目的尾部,举个例子,比如v = {1 2 3 4},当3被push_back进入u时,it仍然指向3,这时这个3是已经使用过的符合题目的数据,下一次循环不可再使用
++it;
res = res+(3-u.size());
u.clear();
}
return res;
}
int main()
{
int nu;
cin>>nu;
cout<<func(nu)<<endl;
return 0;
}
测试
以上是关于排序题型的主要内容,如果未能解决你的问题,请参考以下文章