耀耀切克闹 发表于 2022-6-1 12:51:42

各位大佬帮忙看看这道数字合并的题用c语言怎么写?

题目描述
设有 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 14:11:22

#include <stdio.h>
#include <string.h>

int comp(char s1[] , char s2[])
{
      int i , m , r , n1 , n2                                                               ;
      n1 = strlen(s1)                                                                     ;
      n2 = strlen(s2)                                                                     ;
      m = (n1 < n2) ? n1 : n2                                                               ;
      for(i = 0 ; i < m && s1 == s2 ; i ++)                                           ;
      if(i == m) {
                if(n1 == n2) r = 0                                                            ;
                else if(n1 < n2) r = comp(s1 , & s2)                                       ;
                else r = comp(& s1 , s2)                                                   ;
      } else {
                if(s1 > s2) r = 1                                                       ;
                else r = -1                                                                   ;
      }
      return r                                                                              ;
}

int main(void)
{
      int c , d , e , i , j , k , n                                                    ;
      char s , r                                                             ;
      scanf("%d" , & n)                                                                     ;
      fflush(stdin)                                                                         ;
      for(i = 0 ; i < n ; i ++) {
                fgets(s , 24 , stdin)                                                      ;
                s) - 1] = '\0'                                                 ;
                d = i                                                                      ;
      }
      for(i = 0 ; i < n - 1 ; i ++) {
                for(k = i , j = i + 1 ; j < n ; j ++) if(comp(s] , s]) > 0) k = j   ;
                e = d                                                                      ;
                d = d                                                                   ;
                d = e                                                                      ;
      }
      for(c = i = 0 ; i < n ; i ++) for(j = 0 ; s] ; j ++) r = s]   ;
      r = '\0'                                                                           ;
      printf("%s\n" , r)                                                                  ;
}

耀耀切克闹 发表于 2022-6-1 15:26:14

jackz007 发表于 2022-6-1 14:11


超时了{:5_100:}

jackz007 发表于 2022-6-1 18:27:48

本帖最后由 jackz007 于 2022-6-1 21:55 编辑

耀耀切克闹 发表于 2022-6-1 15:26
超时了

      再试试这个代码
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 == p2 ; i ++)                                  ;
                if(i < c1) {
                        if(p1 > p2) 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 , e , i , j , k , n                                                    ;
      char s , r                                                             ;
      scanf("%d" , & n)                                                                     ;
      fflush(stdin)                                                                         ;
      for(i = 0 ; i < n ; i ++) {
                fgets(s , 24 , stdin)                                                      ;
                s) - 1] = '\0'                                                 ;
                d = i                                                                      ;
      }
      for(i = 0 ; i < n - 1 ; i ++) {
                for(k = i , j = i + 1 ; j < n ; j ++) if(comp(s] , s]) > 0) k = j   ;
                e = d                                                                      ;
                d = d                                                                   ;
                d = e                                                                      ;
      }
      for(c = i = 0 ; i < n ; i ++) for(j = 0 ; s] ; j ++) r = s]   ;
      r = '\0'                                                                           ;
      printf("%s\n" , r)                                                                  ;
}

傻眼貓咪 发表于 2022-6-1 18:35:09

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int compare(const void* p, const void* q) {
    const char* str1 = (const char*)p;
    const char* str2 = (const char*)q;
    return strcmp(str2, str1);
}

int main(void) {
    int n;
    scanf("%d", &n);
    char nums, str;
    for (int i = 0; i < n; ++i) {
      scanf("%s", str);
      strcpy(nums, str);
    }
    qsort(nums, n, sizeof(nums), compare);
    for (int i = 0; i < n; ++i) printf("%s", nums);
    return 0;
}

jhq999 发表于 2022-6-1 23:12:10

本帖最后由 jhq999 于 2022-6-2 06:31 编辑

#include <stdio.h>
#include <stdlib.h>
int strlen(char* str){
        int i=0;
        while(str);
        return i;
}
int strcmp(char* str1,char* str2){
        int i=0;
        for(;str1&&str2;i++){
                if(str1>str2)return 1;
                else if(str1<str2)return -1;
                }
        if(!(str1||str2))return 0;
        if('\0'==str1){
                //for(;str2;i++);
                if(str1>str2)return 1;
                else return -1;
                }
        else {
                //for(;str1;i++);
                if(str2>str1[i)return -1;
                else return 1;
                }

        }
int strsort(char** pstr,int n){
        for(int i=0;i<n-1;i++){
                for(int j=n-1;j>0;j--){
                        if(strcmp(pstr,pstr)<0){
                                char *tmp=pstr;
                                pstr=pstr;
                                pstr=tmp;
                                }
                       
                        }
                }
        return 0;
        }
void del0(char* str){
        for(int i=0,j=0;str||str;i++,j++){
                if('\0'==str)j++;
                str=str;
                }
        }
int main(){
        char str={0};
        int n=0,start=0;
        scanf("%d",&n);
        char **pstr=(char**)malloc(sizeof(char*)*n);
        int i=0;
        for(i=0,start=0;i<n;i++){
                scanf("%s",str+start);
                pstr=str+start;
                start+=strlen(str+start);
                }
        strsort(pstr,n);
       
        for(i=0;i<n;i++)printf("%s",pstr);
        free(pstr);
        return 0;
        }
页: [1]
查看完整版本: 各位大佬帮忙看看这道数字合并的题用c语言怎么写?