HDU 1106 排序

排序

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 41909    Accepted Submission(s): 12014


Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。

你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。

 

 

Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。  

输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
 

 

Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
 

 

Sample Input
0051231232050775
 

 

Sample Output
0 77 12312320
 

 

Source
 

 

Recommend
Eddy   |   We have carefully selected several similar problems for you:   1108  1280  1236  1004  1391
 
注意多个5,头尾有5,多种情况即可。
不过这种题用容器做会更容易,再贴一个别人的代码,以后学习
 
#include<queue>

#include<map>

#include<math.h>

#include<stdio.h>

#include<string.h>

#include<iostream>

#include<algorithm>

using namespace std;

#define N 100005

int num,cnt;

char str[N];

char str2[N];

int a[N];



int main()

{

    while(cin>>str2)

    {



        num=cnt=0;

        int k=0;int flag=1;

        memset(str,0,sizeof(str));

        for(int i=0;str2[i];i++)

        {

            if(str2[i]=='5'&&flag)continue;

            str[k++]=str2[i];flag=0;

        }

        //cout<<str<<endl;

        for(int i=0;;i++)

        {

            if(str[i]=='\0')

            {

                a[cnt++]=num;

                num=0;

                break;

            }

            if(str[i]=='5')

            {

                if(str[i+1]=='\0'||str[i+1]=='5')continue;

                a[cnt++]=num;

                num=0;

                continue;

            }

            num=num*10+(str[i]-48);

        }

        sort(a,a+cnt);

        int j;

        for(j=0;j<cnt-1;j++)

            printf("%d ",a[j]);

        printf("%d\n",a[j]);

    }

    return 0;

}
#include<iostream>

#include<sstream>

#include<vector>

#include<cstdlib>

#include<algorithm>

using namespace std;

int main()

{

    string str;

    while(cin>>str)

    {

        vector<string> v1;

        vector<int> v2;

        for(int i=0;i!=str.size();++i)

        {

            if(str[i]=='5')

                str[i]=' ';

        }

    istringstream in(str);

    string temp;

    while(in>>temp)

        v1.push_back(temp);

    for(auto b=v1.cbegin();b!=v1.cend();++b)

    {

        int temp=atoi(b->c_str());

        v2.push_back(temp);

    }

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

    auto b=v2.cbegin();

    for(;b!=v2.cend()-1;++b)

        cout<<*b<<" ";

    cout<<*b<<endl;

    }

    return 0;

}

 

你可能感兴趣的:(HDU)