HDOJ 1106ソート

2431 ワード

ツールバーの
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 41261    Accepted Submission(s): 11824
Problem Description
1行の数字を入力して、この行の数字の中の“5”をすべて空白と見なすと、1行が空白で分割されたいくつかの非負の整数が得られます(一部の整数は“0”で始まり、これらの頭部の“0”は無視されるべきで、この整数がいくつかの“0”から構成されていない限り、この整数は0です).
あなたの任務は、これらの分割で得られた整数を、小さい順にソートして出力することです.
 
Input
入力には複数のテスト例が含まれており、各入力データのセットには1行の数字しかありません(数字の間にスペースはありません).この行の数字の長さは1000以下です.  
入力データ保証:分割された非負の整数は1000000を超えない.入力データがすべて「5」で構成されるはずがない.
 
Output
各試験例について、分割された整数ソートの結果を出力し、隣接する2つの整数間を1つのスペースで分割し、各出力セットが1行を占める.
 
Sample Input

    
    
    
    
0051231232050775

 
Sample Output

    
    
    
    
0 77 12312320

 
Source
POJ
 
Recommend
Eddy   |   We have carefully selected several similar problems for you:   1108  1201  1040  1280  1002
いくつかのテストデータ:
505123123205077555
0 77 12312320
00005051231232050775
0 0 77 12312320
50512312320555507750005
0 0 77 12312320
505123123205077
0 77 12312320
051231232055077
0 77 12312320
5550
0
1155663535006555
3 6 11 663
10000000055051120
0 1120 100000000
00060054
4 600
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main(){
    char str[1005];
    int a[1005],i,k,len;
    while(~scanf("%s",str)){
        len=strlen(str);
        k=0;
        memset(a,0,sizeof(a));
        for(i=0;i<len;){  //         
            while(str[i]=='5')
                i++;  //     5
            while(str[i]!='5'&&i<len){
                a[k]=a[k]*10+str[i]-'0';
                i++;
            }
            while(str[i]=='5'&&i<len)
                i++;  //   5
            if(i<len) k++;  //             ,      
        }   //      
        sort(a,a+k+1);
        if(k>0){
            printf("%d",a[0]);
            for(i=1;i<=k;i++)
                printf(" %d",a[i]);
        }
        else printf("%d",a[0]);
        printf("
"); } return 0; }