|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述
设有 n 个正整数,将它们连成一排,组成一个最大的多位数。例如:输入 n = 3 以及三个正整数 13, 312, 343, 则连成的最大数为 34331213
输入描述
第 1 行输入正整数个数 n, 下面 n 行输入 n 个整数,n 不大于 100, 每个正整数不超过 20 位
输出描述
一行,组成的最大整数,输入保证输出结果不超过 200 位
样例输入
4
7
13
4
246
样例输出
7424613
本帖最后由 jackz007 于 2022-6-1 21:55 编辑
再试试这个代码
- int comp(char s1[] , char s2[])
- {
- int c1 , c2 , i , m , n1 , n2 , r ;
- char * p1 , * p2 ;
- for(p1 = s1 , p2 = s2 ;;) {
- n1 = strlen(p1) ;
- n2 = strlen(p2) ;
- c1 = (n1 < n2) ? n1 : n2 ;
- c2 = (n1 > n2) ? n1 : n2 ;
- for(i = 0 ; i < c1 && p1[i] == p2[i] ; i ++) ;
- if(i < c1) {
- if(p1[i] > p2[i]) r = 1 ;
- else r = -1 ;
- break ;
- } else {
- if(c1 == c2) {
- r = 0 ;
- break ;
- } else {
- if(n1 > n2) p1 += c1 ;
- else p2 += c1 ;
- }
- }
- }
- return r ;
- }
- int main(void)
- {
- int c , d[100] , e , i , j , k , n ;
- char s[100][24] , r[2004] ;
- scanf("%d" , & n) ;
- fflush(stdin) ;
- for(i = 0 ; i < n ; i ++) {
- fgets(s[i] , 24 , stdin) ;
- s[i][strlen(s[i]) - 1] = '\0' ;
- d[i] = i ;
- }
- for(i = 0 ; i < n - 1 ; i ++) {
- for(k = i , j = i + 1 ; j < n ; j ++) if(comp(s[d[j]] , s[d[k]]) > 0) k = j ;
- e = d[i] ;
- d[i] = d[k] ;
- d[k] = e ;
- }
- for(c = i = 0 ; i < n ; i ++) for(j = 0 ; s[d[i]][j] ; j ++) r[c ++] = s[d[i]][j] ;
- r[c] = '\0' ;
- printf("%s\n" , r) ;
- }
复制代码
|
|