鱼C论坛

 找回密码
 立即注册
查看: 1820|回复: 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 编辑


        再试试这个代码
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)                                                                    ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i] == s2[i] ; i ++)                                           ;
        if(i == m) {
                if(n1 == n2) r = 0                                                            ;
                else if(n1 < n2) r = comp(s1 , & s2[i])                                       ;
                else r = comp(& s1[i] , s2)                                                   ;
        } else {
                if(s1[i] > s2[i]) r = 1                                                       ;
                else r = -1                                                                   ;
        }
        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)                                                                    ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-1 15:26:14 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-1 18:27:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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)                                                                    ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[n][20], str[20];
    for (int i = 0; i < n; ++i) {
        scanf("%s", str);
        strcpy(nums[i], str);
    }
    qsort(nums, n, sizeof(nums[0]), compare);
    for (int i = 0; i < n; ++i) printf("%s", nums[i]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i++]);
        return i;
}
int strcmp(char* str1,char* str2){
        int i=0;
        for(;str1[i]&&str2[i];i++){
                if(str1[i]>str2[i])return 1;
                else if(str1[i]<str2[i])return -1;
                }
        if(!(str1[i]||str2[i]))return 0;
        if('\0'==str1[i]){
                //for(;str2[i];i++);
                if(str1[0]>str2[i])return 1;
                else return -1;
                }
        else {
                //for(;str1[i];i++);
                if(str2[0]>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[j-1],pstr[j])<0){
                                char *tmp=pstr[j-1];
                                pstr[j-1]=pstr[j];
                                pstr[j]=tmp;
                                }
                        
                        }
                }
        return 0;
        }
void del0(char* str){
        for(int i=0,j=0;str[j]||str[j+1];i++,j++){
                if('\0'==str[j])j++;
                str[i]=str[j];
                }
        }
int main(){
        char str[400]={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[i]=str+start;
                start+=strlen(str+start);
                }
        strsort(pstr,n);
        
        for(i=0;i<n;i++)printf("%s",pstr[i]);
        free(pstr);
        return 0;
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 14:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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