hpuoj1075 1075: KACA的數字排序 字串排序
阿新 • • 發佈:2018-12-25
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; }