洛谷P1012 [NOIP1998 提高组] 拼数

前言:

1.借助了洛谷题解的代码和思路,并且加以转诉为自己理解的话语供读者参考.

2.思路分布讲解,便于读者层层理解.

3.考查知识(个人观点):字符串变量类型,字符串变量类型的四则运算,sort函数排序.

思路:

首先

我们根据输出样例和题目的意思我们不难看出就是所有数字通过整理联排之后输出n个数所形成的最大的数,以第一个样例为例子,输入3个数13和312和343可见343,根据题意首位相接组成最大的数是34331213,题目的说明和提示给出了输入变量的范围,很明显这是字符串排序.

补充知识点

1.对任意个数的字符串排序,比较字符串的大小是比较字符串变量首字符的ASCII值的大小,以第一个样例为例子13 312 343三个字符串中,343最大其次是312和最后是13.(字符串排序).

代码

思路

1.通过sort,进行字符串大小比较然后排序好输出,在c语言没有字符串变量类型所以我不知道在c++有没有,我用char和printf,scanf写失败了,用c++之后cin和cout就对了以输出样例为例,对字符串类型数组的遍历就是 s1为13 s2 312 s3为343,然后用sort函数排序输出最后得到75分.

2.

如果要想拿到ac,有一个点需要特别注意,因为如果两个字符串一个是另一个的前缀的话,你的比较方式就失效了,比如561和56,应该是56比561大放在前面所以在cmp函数比较就是s+n和n+s的比较.

AC代码

补充注意点

1.字符串类型的相加就是类似于string里面strcat函数对两个字符串变量进行从左到右连接!!!.

2.这道题的排序思想需要重点去理解sort函数排序(可以上b站通过视频学习).


 

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值