整数排序
描述:实现输入一组大于等于0的整数,根据从小到大的顺序排序后输出,排序后有连续数时,只输出连续数中最小和最大的两个数。
运行时间限制:无限制
内存限制:无限制
输入:一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(“,”)分割,输入字符串的总长度小于等于100个字节。
输出:排序后的值,各个整数之间以空格分隔。
样例输入:1,4,3,110,2,90,7
样例输出:1 4 7 90 110
答案:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
vector<int> Sort(string str)
{
int size = str.size();
vector<int> vec;
if (size == 0)
{
return vec;
}
int num = 0;
for (int i = 0; i <= size; ++i)
{
if (i == size || str[i] == ',')
{
vec.push_back(num);
num = 0;
}
else if (str[i] >= '0' && str[i] <= '9')
{
num = num * 10 + str[i] - '0';
}
}
sort(vec.begin(), vec.end());
int count = vec.size();
int start = 0;
for (int i = 1; i <= count; ++i)
{
if (i == count || vec[i] != vec[i - 1] + 1)
{
// -1标记删除
for (int j = start + 1; j <= i - 2; ++j)
{
vec[j] = -1;
}
start = i;
}
}
return vec;
}
int main()
{
string str;
vector<int> vec;
int size;
while (cin >> str)
{
vec = Sort(str);
size = vec.size();
for (int i = 0; i < size; ++i)
{
if (vec[i] == -1)
{
continue;
}
if (i == 0)
{
cout << vec[i];
}
else
{
cout << " " << vec[i];
}
}
cout << endl;
}
return 0;
}