news 2026/4/22 7:00:16

用C语言实现“拼接最大数”:核心思路与代码解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用C语言实现“拼接最大数”:核心思路与代码解析

用C语言实现“拼接最大数”:核心思路与代码解析

在算法题中,“将一组数字拼接成最大整数”是经典的字符串排序类问题,比如给定数组[3,30,34,5,9],需拼接出9534330这个最大数。本文将基于提供的C语言代码,拆解解题核心思路、代码逻辑,以及背后的排序原理。

一、问题核心:不是数值排序,而是“拼接结果排序”

要拼接出最大数,关键误区是按数字本身大小排序(比如30比3大,但30拼接3是303,3拼接30是330,显然330更大)。因此核心原则是:

对任意两个数字a和b,比较ab(a拼接b)和ba(b拼接a)的大小,若ba > ab,则b应排在a前面(降序)。

例如:

  • a=3,b=30:ab=330,ba=303 → 330>303 → 3排在30前面;
  • a=9,b=5:ab=95,ba=59 → 95>59 → 9排在5前面。

二、代码逐行解析:从输入到拼接的完整流程

1. 全局变量定义

chararr[20][20];intn;
  • arr[20][20]:二维字符数组,存储每个数字转换后的字符串(最多20个数字,每个数字转字符串最多20位);
  • n:输入数字的个数。

2. 自定义比较函数(qsort的核心)

intcmp(constvoid*a,constvoid*b){charab[40],ba[40];strcpy(ab,(char*)a);strcat(ab,(char*)b);strcpy(ba,(char*)b);strcat(ba,(char*)a);returnstrcmp(ba,ab);// 降序排序}

这是整个程序的核心,用于qsort(C标准库快速排序)的自定义排序规则:

  • ab:指向arr中两个字符串的指针(即两个数字的字符串形式);
  • ab:存储a拼接b的结果,ba:存储b拼接a的结果;
  • strcmp(ba, ab)
    • ba > abstrcmp返回正数,qsort会将b排在a前面;
    • ba < ab,返回负数,a排在b前面;
    • 若相等,返回0,顺序不变。
      (注:strcmp默认升序,这里返回ba-ab的比较结果,实现降序排序)。

3. 主函数逻辑

intmain(){// 1. 输入数字个数scanf("%d",&n);// 2. 输入每个数字并转为字符串存入数组for(inti=0;i<n;i++){intnum;scanf("%d",&num);sprintf(arr[i],"%d",num);// 数字转字符串}// 3. 按自定义规则排序qsort(arr,n,sizeof(arr[0]),cmp);// 4. 拼接输出结果for(inti=0;i<n;i++)printf("%s",arr[i]);return0;}

流程拆解:

  • 输入环节:先读数字个数n,再逐个读数字,通过sprintf将数字转为字符串(比如数字30→字符串"30"),存入arr
  • 排序环节:调用qsort,传入数组、元素个数、每个元素大小、自定义比较函数cmp,按“拼接结果最大”规则排序;
  • 输出环节:遍历排序后的数组,逐个打印字符串,即得到拼接后的最大数。

三、示例验证:用实际输入测试代码

测试用例

输入:

5 3 30 34 5 9

执行过程

  1. 数字转字符串后,arr初始为:["3","30","34","5","9"]
  2. qsortcmp规则排序:
    • 比较9和5:95>59 → 9在前;
    • 比较5和34:534>345 → 5在前;
    • 比较34和3:343>334 → 34在前;
    • 比较3和30:330>303 → 3在前;
      最终排序后arr["9","5","34","3","30"]
  3. 输出拼接结果:9534330(正确)。

四、代码扩展与注意事项

1. 边界情况处理

原代码未处理“全0”场景(比如输入3 0 0 0),此时会输出000,但正确结果应为0。可添加优化:

// 排序后先判断第一个元素是否为0if(arr[0][0]=='0'){printf("0");return0;}

2. 适用范围

代码中arr定义为20×20,适合数字个数≤20、单个数字位数≤20的场景,若需处理更大数据,可调整数组大小或改用动态内存分配。

3. 核心思想延伸

该思路不仅适用于C语言,在Python、Java等语言中,解决“拼接最大数”问题的核心逻辑一致:自定义排序规则,比较两个元素的拼接结果。

五、总结

这道题的核心是跳出“数值排序”的思维定式,转向“拼接结果排序”。C语言实现的关键在于利用qsort的自定义比较函数,将“拼接后更大”的规则转化为排序逻辑。理解这个核心思路后,不仅能解决该问题,还能举一反三处理类似的“自定义排序”算法题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 4:31:03

faster-whisper:重新定义语音识别速度的AI利器

faster-whisper&#xff1a;重新定义语音识别速度的AI利器 【免费下载链接】faster-whisper 项目地址: https://gitcode.com/gh_mirrors/fas/faster-whisper 还在为语音转文字处理速度慢而烦恼吗&#xff1f;传统的语音识别工具往往需要漫长的等待时间&#xff0c;特别…

作者头像 李华
网站建设 2026/4/17 20:57:57

GPT-SoVITS批量大小(Batch Size)选择指南

GPT-SoVITS批量大小&#xff08;Batch Size&#xff09;选择指南 在语音合成技术飞速发展的今天&#xff0c;个性化TTS系统已经从实验室走向实际应用。GPT-SoVITS作为当前开源社区中最具代表性的少样本语音克隆框架之一&#xff0c;仅需一分钟音频即可实现高保真音色复刻&#…

作者头像 李华
网站建设 2026/4/22 19:43:12

Day 49 随机函数与广播机制

文章目录Day 49 随机函数与广播机制1. 随机张量的生成1.1 torch.randn&#xff1a;标准正态分布1.2 其他常见随机函数2. 用随机输入测试网络输出尺寸3. 广播机制 (Broadcasting)3.1 加法的广播案例3.2 矩阵乘法中的广播Day 49 随机函数与广播机制 本节目标 用随机函数快速得到…

作者头像 李华
网站建设 2026/4/21 4:02:05

6大核心痛点精准修复:Mac鼠标滚动优化软件Mos深度排障指南

6大核心痛点精准修复&#xff1a;Mac鼠标滚动优化软件Mos深度排障指南 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independent…

作者头像 李华
网站建设 2026/4/20 20:43:19

GPT-SoVITS术语表(Lexicon)自定义教程

GPT-SoVITS术语表&#xff08;Lexicon&#xff09;自定义实践指南 在语音合成技术飞速发展的今天&#xff0c;个性化声音已不再是科幻电影中的幻想。从智能音箱到虚拟主播&#xff0c;越来越多的应用开始追求“像人一样说话”的能力。而真正让这种体验变得精准且自然的关键&…

作者头像 李华
网站建设 2026/4/17 23:48:57

AI绘画终极完整指南:chilloutmix_NiPrunedFp32Fix快速上手

AI绘画终极完整指南&#xff1a;chilloutmix_NiPrunedFp32Fix快速上手 【免费下载链接】chilloutmix_NiPrunedFp32Fix 项目地址: https://ai.gitcode.com/hf_mirrors/emilianJR/chilloutmix_NiPrunedFp32Fix 在AI绘画技术飞速发展的今天&#xff0c;emilianJR/chillout…

作者头像 李华