鱼C论坛

 找回密码
 立即注册
查看: 2122|回复: 5

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

[复制链接]
发表于 2022-6-1 12:51:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述
设有 n 个正整数,将它们连成一排,组成一个最大的多位数。例如:输入 n = 3 以及三个正整数 13, 312, 343, 则连成的最大数为 34331213

输入描述
第 1 行输入正整数个数 n, 下面 n 行输入 n 个整数,n 不大于 100, 每个正整数不超过 20 位

输出描述
一行,组成的最大整数,输入保证输出结果不超过 200 位

样例输入
4

7

13

4

246

样例输出
7424613
最佳答案
2022-6-1 18:27:48
本帖最后由 jackz007 于 2022-6-1 21:55 编辑


        再试试这个代码
  1. int comp(char s1[] , char s2[])
  2. {
  3.         int c1 , c2 , i , m , n1 , n2 , r                                                     ;
  4.         char * p1 , * p2                                                                      ;
  5.         for(p1 = s1 , p2 = s2 ;;) {
  6.                 n1 = strlen(p1)                                                               ;
  7.                 n2 = strlen(p2)                                                               ;
  8.                 c1 = (n1 < n2) ? n1 : n2                                                      ;
  9.                 c2 = (n1 > n2) ? n1 : n2                                                      ;
  10.                 for(i = 0 ; i < c1 && p1[i] == p2[i] ; i ++)                                  ;
  11.                 if(i < c1) {
  12.                         if(p1[i] > p2[i]) r = 1                                               ;
  13.                         else r = -1                                                           ;
  14.                         break                                                                 ;
  15.                 } else {
  16.                         if(c1 == c2) {
  17.                                 r = 0                                                         ;
  18.                                 break                                                         ;
  19.                         } else {
  20.                                 if(n1 > n2) p1 += c1                                          ;
  21.                                 else p2 += c1                                                 ;
  22.                         }
  23.                 }
  24.         }
  25.         return r                                                                              ;
  26. }

  27. int main(void)
  28. {
  29.         int c , d[100] , e , i , j , k , n                                                    ;
  30.         char s[100][24] , r[2004]                                                             ;
  31.         scanf("%d" , & n)                                                                     ;
  32.         fflush(stdin)                                                                         ;
  33.         for(i = 0 ; i < n ; i ++) {
  34.                 fgets(s[i] , 24 , stdin)                                                      ;
  35.                 s[i][strlen(s[i]) - 1] = '\0'                                                 ;
  36.                 d[i] = i                                                                      ;
  37.         }
  38.         for(i = 0 ; i < n - 1 ; i ++) {
  39.                 for(k = i , j = i + 1 ; j < n ; j ++) if(comp(s[d[j]] , s[d[k]]) > 0) k = j   ;
  40.                 e = d[i]                                                                      ;
  41.                 d[i] = d[k]                                                                   ;
  42.                 d[k] = e                                                                      ;
  43.         }
  44.         for(c = i = 0 ; i < n ; i ++) for(j = 0 ; s[d[i]][j] ; j ++) r[c ++] = s[d[i]][j]     ;
  45.         r[c] = '\0'                                                                           ;
  46.         printf("%s\n" , r)                                                                    ;
  47. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-6-1 14:11:22 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <string.h>

  3. int comp(char s1[] , char s2[])
  4. {
  5.         int i , m , r , n1 , n2                                                               ;
  6.         n1 = strlen(s1)                                                                       ;
  7.         n2 = strlen(s2)                                                                       ;
  8.         m = (n1 < n2) ? n1 : n2                                                               ;
  9.         for(i = 0 ; i < m && s1[i] == s2[i] ; i ++)                                           ;
  10.         if(i == m) {
  11.                 if(n1 == n2) r = 0                                                            ;
  12.                 else if(n1 < n2) r = comp(s1 , & s2[i])                                       ;
  13.                 else r = comp(& s1[i] , s2)                                                   ;
  14.         } else {
  15.                 if(s1[i] > s2[i]) r = 1                                                       ;
  16.                 else r = -1                                                                   ;
  17.         }
  18.         return r                                                                              ;
  19. }

  20. int main(void)
  21. {
  22.         int c , d[100] , e , i , j , k , n                                                    ;
  23.         char s[100][24] , r[2004]                                                             ;
  24.         scanf("%d" , & n)                                                                     ;
  25.         fflush(stdin)                                                                         ;
  26.         for(i = 0 ; i < n ; i ++) {
  27.                 fgets(s[i] , 24 , stdin)                                                      ;
  28.                 s[i][strlen(s[i]) - 1] = '\0'                                                 ;
  29.                 d[i] = i                                                                      ;
  30.         }
  31.         for(i = 0 ; i < n - 1 ; i ++) {
  32.                 for(k = i , j = i + 1 ; j < n ; j ++) if(comp(s[d[j]] , s[d[k]]) > 0) k = j   ;
  33.                 e = d[i]                                                                      ;
  34.                 d[i] = d[k]                                                                   ;
  35.                 d[k] = e                                                                      ;
  36.         }
  37.         for(c = i = 0 ; i < n ; i ++) for(j = 0 ; s[d[i]][j] ; j ++) r[c ++] = s[d[i]][j]     ;
  38.         r[c] = '\0'                                                                           ;
  39.         printf("%s\n" , r)                                                                    ;
  40. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-1 15:26:14 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-1 18:27:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-6-1 21:55 编辑


        再试试这个代码
  1. int comp(char s1[] , char s2[])
  2. {
  3.         int c1 , c2 , i , m , n1 , n2 , r                                                     ;
  4.         char * p1 , * p2                                                                      ;
  5.         for(p1 = s1 , p2 = s2 ;;) {
  6.                 n1 = strlen(p1)                                                               ;
  7.                 n2 = strlen(p2)                                                               ;
  8.                 c1 = (n1 < n2) ? n1 : n2                                                      ;
  9.                 c2 = (n1 > n2) ? n1 : n2                                                      ;
  10.                 for(i = 0 ; i < c1 && p1[i] == p2[i] ; i ++)                                  ;
  11.                 if(i < c1) {
  12.                         if(p1[i] > p2[i]) r = 1                                               ;
  13.                         else r = -1                                                           ;
  14.                         break                                                                 ;
  15.                 } else {
  16.                         if(c1 == c2) {
  17.                                 r = 0                                                         ;
  18.                                 break                                                         ;
  19.                         } else {
  20.                                 if(n1 > n2) p1 += c1                                          ;
  21.                                 else p2 += c1                                                 ;
  22.                         }
  23.                 }
  24.         }
  25.         return r                                                                              ;
  26. }

  27. int main(void)
  28. {
  29.         int c , d[100] , e , i , j , k , n                                                    ;
  30.         char s[100][24] , r[2004]                                                             ;
  31.         scanf("%d" , & n)                                                                     ;
  32.         fflush(stdin)                                                                         ;
  33.         for(i = 0 ; i < n ; i ++) {
  34.                 fgets(s[i] , 24 , stdin)                                                      ;
  35.                 s[i][strlen(s[i]) - 1] = '\0'                                                 ;
  36.                 d[i] = i                                                                      ;
  37.         }
  38.         for(i = 0 ; i < n - 1 ; i ++) {
  39.                 for(k = i , j = i + 1 ; j < n ; j ++) if(comp(s[d[j]] , s[d[k]]) > 0) k = j   ;
  40.                 e = d[i]                                                                      ;
  41.                 d[i] = d[k]                                                                   ;
  42.                 d[k] = e                                                                      ;
  43.         }
  44.         for(c = i = 0 ; i < n ; i ++) for(j = 0 ; s[d[i]][j] ; j ++) r[c ++] = s[d[i]][j]     ;
  45.         r[c] = '\0'                                                                           ;
  46.         printf("%s\n" , r)                                                                    ;
  47. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-1 18:35:09 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>

  4. int compare(const void* p, const void* q) {
  5.     const char* str1 = (const char*)p;
  6.     const char* str2 = (const char*)q;
  7.     return strcmp(str2, str1);
  8. }

  9. int main(void) {
  10.     int n;
  11.     scanf("%d", &n);
  12.     char nums[n][20], str[20];
  13.     for (int i = 0; i < n; ++i) {
  14.         scanf("%s", str);
  15.         strcpy(nums[i], str);
  16.     }
  17.     qsort(nums, n, sizeof(nums[0]), compare);
  18.     for (int i = 0; i < n; ++i) printf("%s", nums[i]);
  19.     return 0;
  20. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-1 23:12:10 | 显示全部楼层
本帖最后由 jhq999 于 2022-6-2 06:31 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int strlen(char* str){
  4.         int i=0;
  5.         while(str[i++]);
  6.         return i;
  7. }
  8. int strcmp(char* str1,char* str2){
  9.         int i=0;
  10.         for(;str1[i]&&str2[i];i++){
  11.                 if(str1[i]>str2[i])return 1;
  12.                 else if(str1[i]<str2[i])return -1;
  13.                 }
  14.         if(!(str1[i]||str2[i]))return 0;
  15.         if('\0'==str1[i]){
  16.                 //for(;str2[i];i++);
  17.                 if(str1[0]>str2[i])return 1;
  18.                 else return -1;
  19.                 }
  20.         else {
  21.                 //for(;str1[i];i++);
  22.                 if(str2[0]>str1[i)return -1;
  23.                 else return 1;
  24.                 }

  25.         }
  26. int strsort(char** pstr,int n){
  27.         for(int i=0;i<n-1;i++){
  28.                 for(int j=n-1;j>0;j--){
  29.                         if(strcmp(pstr[j-1],pstr[j])<0){
  30.                                 char *tmp=pstr[j-1];
  31.                                 pstr[j-1]=pstr[j];
  32.                                 pstr[j]=tmp;
  33.                                 }
  34.                        
  35.                         }
  36.                 }
  37.         return 0;
  38.         }
  39. void del0(char* str){
  40.         for(int i=0,j=0;str[j]||str[j+1];i++,j++){
  41.                 if('\0'==str[j])j++;
  42.                 str[i]=str[j];
  43.                 }
  44.         }
  45. int main(){
  46.         char str[400]={0};
  47.         int n=0,start=0;
  48.         scanf("%d",&n);
  49.         char **pstr=(char**)malloc(sizeof(char*)*n);
  50.         int i=0;
  51.         for(i=0,start=0;i<n;i++){
  52.                 scanf("%s",str+start);
  53.                 pstr[i]=str+start;
  54.                 start+=strlen(str+start);
  55.                 }
  56.         strsort(pstr,n);
  57.        
  58.         for(i=0;i<n;i++)printf("%s",pstr[i]);
  59.         free(pstr);
  60.         return 0;
  61.         }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 05:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表