您的位置:首页 > 其它

华为机试题:整数排序

2016-02-02 21:51 225 查看
描述: 实现输入一组大于等于0的整数,根据从小到大的顺序排序后输出,排序后有连续数时,只输出连续数中最小和最大的两个数。
 
题目类别: 排序 
难度: 高级 
运行时间限制:10Sec
内存限制:128MByte
阶段: 入职前练习 
输入: 

一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(“,”)分隔, 输入字符串的总长度小于等于100个字节。
 
输出: 

排序后的值,各个整数之间以空格分隔。
 
样例输入:
1,4,3,110,2,90,7

样例输出:
1 4 7 90 110

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <map>
#include <vector>

using namespace std;

int main()
{
char str[101] = {0};
char *token = NULL;
vector<int> vec;
int data = 0, i = 0, lens = 0;

cin >> str;
token = strtok(str,",");
while(token != NULL)
{
data = atoi(token);
vec.push_back(data);
token = strtok(NULL,",");
}

sort(vec.begin(),vec.end());

lens = vec.size();
for(i = 0; i < lens; i++)
{
if(i == 0)
{
cout << vec[i];
}
else
{
cout << " " << vec[i];
}

if(i < lens - 1 && (vec[i+1] - vec[i] == 1))
{
while((i < lens - 1) && (vec[i+1] - vec[i] == 1))
{
i++;
}
cout << " " << vec[i];
}
}

cout << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: