【九度OJ】题目1190:大整数排序

参考:https://blog.csdn.net/arcsinsin/article/details/12918433

          https://blog.csdn.net/fjx1173865548/article/details/48345061

题目描述:

对N个长度最长可达到1000的数进行排序。

输入:

输入第一行为一个整数N,(1<=N<=100)。
接下来的N行每行有一个数,数的长度范围为1<=len<=1000。
每个数都是一个正数,并且保证不包含前缀零。

输出:

可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。

样例输入:
3
11111111111111111111111111111
2222222222222222222222222222222222
33333333
样例输出:
33333333
11111111111111111111111111111
2222222222222222222222222222222222

———————————————————————————————————————————————————

本题是对字符串二维数组的一个排序。用sort已经不行了,用qsort !(下面证明sort也是可以的,hhh)

qsort
用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
参数: 1 待排序 数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的 指针,用于确定排序的顺序


[cpp]  view plain  copy
  1. #include<iostream>  
  2. #include<cstdio>  
  3. #include<cstring>  
  4. #include<algorithm>  
  5. using namespace std;  
  6. const int maxn = 1002;  
  7. char s[maxn][maxn];  
  8. //请注意cmp函数的写法  
  9. int cmp(const void *a, const void *b)  
  10. {  
  11.     int len1 = strlen((char *)a);  
  12.     int len2 = strlen((char *)b);  
  13.     if (len1 == len2)  
  14.         return strcmp((char *)a,(char *)b);  
  15.     else  
  16.         return len1 - len2;  
  17. }  
  18. int main()  
  19. {  
  20.     int n, i;  
  21.     while (scanf("%d",&n) == 1)  
  22.     {  
  23.         for (i = 0; i < n; i++)  
  24.         {  
  25.             scanf("%s",s[i]);  
  26.         }  
  27.         //注意qsort四个参数的不同含义  
  28.         //特别是第三个参数:单个元素占用空间的大小  
  29.         qsort(s,n,sizeof(s[0]),cmp);  
  30.         for (i = 0; i < n; i++)  
  31.         {  
  32.             cout<<s[i]<<endl;  
  33.         }  
  34.     }  
  35.     return 0;  
  36. }  


———————————————————————————————————————————————————

[cpp]  view plain  copy
  1. #include<iostream>  
  2. #include<stdio.h>  
  3. #include<algorithm>  
  4. #include<string.h>  
  5.    
  6. using namespace std;  
  7. #define N 1001  
  8. struct Num{  
  9.     char num[N];  
  10.     int len;  
  11.    
  12.     bool operator < (const Num &A) const{  
  13.         if(len != A.len)  
  14.             return len < A.len;  
  15.         else{  
  16.             for(int i = 0; i < len; i++)  
  17.             {  
  18.                 if(num[i] != A.num[i])  
  19.                     return num[i] < A.num[i];  
  20.                 else  
  21.                     continue;  
  22.             }  
  23.         }  
  24.     }  
  25. }buf[101];  
  26.    
  27. int main()  
  28. {  
  29.     int n;  
  30.    
  31.     while(scanf("%d", &n) != EOF){  
  32.         for(int i = 0; i < n; i++){  
  33.             scanf("%s", buf[i].num);  
  34.             buf[i].len = strlen(buf[i].num);  
  35.         }  
  36.    
  37.         sort(buf, buf+n);  
  38.         for(int i = 0; i < n; i++){  
  39.             printf("%s\n", buf[i].num);  
  40.            // buf[i].len = strlen(buf[i].num);  
  41.         }  
  42.     }  
  43.     return 0;  
  44. }  
  45. /************************************************************** 
  46.     Problem: 1190 
  47.     User: various 
  48.     Language: C++ 
  49.     Result: Accepted 
  50.     Time:10 ms 
  51.     Memory:1624 kb 
  52. ****************************************************************/  

猜你喜欢

转载自blog.csdn.net/qq_34898866/article/details/80217787
今日推荐