1. 程式人生 > >hpuoj1075 1075: KACA的數字排序 字串排序

hpuoj1075 1075: KACA的數字排序 字串排序

1075: KACA的數字排序 [排序]

時間限制: 1 Sec 記憶體限制: 128 MB

提交: 68 解決: 15 統計

題目描述

PIPA想讓KACA給一串數進行排序。

KACA表示這是個簡單的問題,然而當他看到這些數字後,頓時懵逼了。只見各種1234567890987654321……都是非常巨大的數字,但在他思考之後,還是選擇接下了這個任務。

輸入

第一行是一個整數TT ( 1≤T≤1001≤T≤100 ),代表有TT組測試資料。

每組資料第一行是一個整數nn ( 1≤n≤1001≤n≤100 ),代表有nn個數字。

下面有n行,每行有一個整數xx ( 0≤|x|≤101000≤|x|≤10100 )。

輸出

對於每組測試資料,輸出從小到大排序後的結果。

每行輸出一個數字。

樣例輸入

1
3
123
345
234

樣例輸出

123
234
345

思路:

可以用結構體來排序

程式碼:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
    char s[110];
}a[110];
struct N
{
    char s[110];
}b[110];
char s[110];
bool cmp(node x,node y)
{
    if (strlen(x.s) == strlen(y.s))
        return strcmp(x.s,y.s) > 0;
    else return strlen(x.s) > strlen(y.s);
}
bool cmp2(N x,N y)
{
    if (strlen(x.s) == strlen(y.s))
        return strcmp(x.s,y.s) < 0;
    else return strlen(x.s) < strlen(y.s);
}
int main()
{
    int t;
    scanf("%d",&t);
    while (t --)
    {
        int n,p1 = 0,p2 = 0;
        scanf("%d",&n);
        for (int i = 0;i < n;i ++)
        {
            scanf("%s",s);
            if (s[0] == '-') strcpy(a[p1 ++].s,s);
            else strcpy(b[p2 ++].s,s);
        }
        sort(a,a + p1,cmp);
        sort(b,b + p2,cmp2);
        for (int i = 0;i < p1;i ++)
            printf("%s\n",a[i].s);
        for (int i = 0;i < p2;i ++)
            printf("%s\n",b[i].s);
    }
    return 0;
}