不错的题目-n个数连接得到的最大值

介绍了一种通过自定义字符串比较规则来找出由多个整数组成的最大多位数的方法。该算法首先将所有整数转化为字符串,然后按特定规则排序并拼接以获得最终结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题目还是很不错的

【字符串排序】n个数连接得到最小或最大的多位整数

 

题目

描述:设有n个正整数,将它们依次连成在一排,组成一个多位数,现在要求可能组成的多位数中最大的多位数是什么?

例如:n=3时,3个整数13,312,343连成的最大多位数为:343-312-13。

例如:n=4时,4个证书7,13,4,246连成的最大多位数为:7-4-246-13。

输入:n个整数,EOF结尾。

输出:最大的多位数。

算法分析

 不能直接用贪心。但是可以这样:

正确的贪心标准是:先把整数化成字符串,然后再比较a+b和b+a,如果a+b>b+a,就把a排在b的前面,反之则把a排在b的后面。

  举例说明正常的字符串比较缺陷!如:A=’321’,B=’32’,按照标准的字符串比较规则因为A>B,所以A+B > B+A ,而实际上'32132' < '32321'。 

 

所以,自定义一种字符串的比较规则:

  如果A+B>B+A,则我们认为A>B。

  且可以证明:如果A+B>=B+A,B+C>=C+B,则一定有:A+C>=C+A。 

  这样一来,程序就很简单了。分3步:

  (1)先把n个数字转换成字符串存储;

  (2)按照自定义的规则把n个字符串从大到小排序;

  (3)依次输出这些字符串。

 

转载于:https://www.cnblogs.com/charlesblc/p/6329714.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值