码迷,mamicode.com
首页 > 编程语言 > 详细

排序题型

时间:2020-04-17 09:32:47      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:pre   大于   family   cout   不可   cin   mamicode   循环   次数   

题目如下

技术图片

 输入输出样例

技术图片

 

 由于给出的题目难度是不定序的,所以第一步要先对其从小到大排序,然后比较从头到尾两两做差,差值小于等于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;
}

 测试

技术图片

 

 

排序题型

标签:pre   大于   family   cout   不可   cin   mamicode   循环   次数   

原文地址:https://www.cnblogs.com/area-h-p/p/12717570.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!