2011-08-09 07:57:21Morris

d190. 11462 - Age Sort (優化重製)

d190. 11462 - Age Sort

內容 :

給你某國家所有一歲以上 (含) 的人民的年齡。你知道該國沒有人活到 100 歲或更老。現在給你一個很簡單的工作,就是把所有的年齡由小到大排序。

輸入說明 :

輸入檔有若干組測試資料。每組測資以整數 n (0<n<=2000000) 開始,代表人數。下一行則有 n 個整數,代表他們的年齡。n = 0 代表輸入的結束,請勿處理這組測資。

輸出說明 :

對於每組測資,印出一行以空白隔開的 n 個整數。這些整數為人民的年齡,由小到大排列。

範例輸入 :

5
3 4 2 1 5
5
2 3 2 3 1
0

範例輸出 :

1 2 3 4 5
1 2 2 3 3

提示 :

出處 :

UVa ACM 11462 (管理:snail)


/**********************************************************************************/
/*  Problem: d190 "11462 - Age Sort" from UVa ACM 11462                           */
/*  Language: C                                                                   */
/*  Result: AC (84ms, 5828KB) on ZeroJudge                                        */
/*  Author: morris1028 at 2011-08-05 11:39:44                                     */
/**********************************************************************************/


#include<stdio.h>
#include<stdlib.h>
int ReadInt(int *x) {
    static char c, neg;
    while((c = getchar()) < '-');
    neg = (c == '-') ? -1 : 1;
    *x = (neg == 1) ? c-'0' : 0;
    while((c = getchar()) >= '0')
        *x = (*x << 3) + (*x << 1) + c-'0';
    *x *= neg;
    if(c == EOF) return EOF;
    return 0;
}
static char Buf[10000000], *p;
main() {
    int n, x;
    while(ReadInt(&n) != EOF && n) {
        p = Buf;
        int cnt[101] = {}, a, b;
        for(a = 0; a < n; a++)
            ReadInt(&x), cnt[x]++;
        char t1, t2;
        for(a = 1; a <= 100; a++) {
            t1 = a/10+'0', t2 = a%10 + '0';
            for(b = cnt[a]; b; b--) {
                if(a >= 100)*p++ = '0';
                if(a >= 10)    *p++ = t1;
                *p++ = t2;
                *p++ = ' ';
            }
        }
        *p++ = '\n';    
        *p++ = '\0';
        fwrite(Buf, 1, p - Buf - 1, stdout);
    }
    return 0;
}

上一篇:a158. 11827 - Maximum GCD

下一篇:c110. Packets