拼数(C++)
问题:
设有n个正整数,将他们排成一排,组成一个最大的多位整数。
INPUT:
第一行,正整数的个数n
第二行,n个正整数
OUTPUT:
一个正整数,表示最大的整数。
输入样例:
3
13 312 343
样例输出:
34331213
思路:
如果我们把每个输入的正整数当作正数来处理的话,
我们会发现我们很难处理。
因为存在情况一个数是另一个数的前缀的情况。
这个时候不知道要比较多少位。
比如说,5个正整数 756 212 2123 21231.
这时就很麻烦。
而如果我们把这些数字当作字符串来处理的话,过样例是没问题,
但是对于我刚刚给出那个输入可能就会出错。
因为字符串比较大小的时候不是看数的大小,而是看首字符的大小,依次递推。
比如说:
2123
21231
首字符相同,第二,三,四字符相同,那么就比较第五个字符,其中321第三个字符为1,而32没有,
所以字符串比较的时候,21231就在2123前面,而我们需要的是2123在21231前面。
这个时候需要我们自定义一种新的大小比较方式。
即:IF A+B>B+A , A>B.
如何证明呢?这里引用一下dmy大佬的作业题解:

然后我们对输入这些字符串进行排序,从大到小输出字符串,即可输出最大正整数。
代码如下
#include<bits/stdc++.h> //这个头文件包含了C++所有头文件
using namespace std;
int main()
{
int n;
cin>>n;
string t1,t2,a[n];
for (int i = ; i < n; i++) cin>>a[i];
for (int i = ; i < n-; i++) //为了简便明了,用选择排序
{
for (int j = i+; j < n; j++)
{ //if a+b>b+a,a>b
t1=a[i]+a[j];
t2=a[j]+a[i];
if (t1<t2) swap(a[i],a[j]); //swap()函数在std命名空间里
} }
for(int i=;i<n;i++) cout<<a[i];
return ;
}
拼数(C++)的更多相关文章
- P1012 拼数
P1012 拼数 输入输出样例 输入样例 3 13 312 343 输出样例 34331213 注意 当你输入: 6321 32 407 135 13 217 应该输出: 40732321217135 ...
- 【洛谷p1012】拼数
(今天yuezhuren大课间放我们出来了……) (另外今天回了两趟初中部) 拼数[传送门] 洛谷算法标签: (然鹅这两个学的都不好,能过真的how strange) 开始的时候没读题啊,直接暴力so ...
- 洛谷 P1012 拼数
P1012 拼数 标签 字符串 排序 NOIp提高组 1998 云端 难度 普及- 时空限制 1s / 128MB 题目描述 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例 ...
- NC16783 [NOIP1998]拼数
NC16783 [NOIP1998]拼数 题目 题目描述 设有 \(n\) 个正整数(\(n ≤ 20\)),将它们联接成一排,组成一个最大的多位整数. 例如:\(n=3\) 时,\(3\) 个整数 ...
- 1998 NOIP 拼数 string 和sort的新理解
题目:https://www.luogu.org/problemnew/show/P1012 今天真是长了见识.这道题做了十几分钟,用模拟愣是调不出来.直到我看了题解——(当场去世)…… 题的意思是n ...
- 洛谷-拼数-NOIP1998提高组复赛
题目描述 Description 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4 ...
- 洛谷P1012 拼数 string
又是大水题... 这一题过水,令人无法接受...... 但是如果我们不知道string的一个神奇的性质的话,就会很难受. 我一开始手写 < 号,但是发现如果 string a 的前一部分恰好是 ...
- P【1012】拼数
十分蒟蒻...(还是看别人的博才过的...) 题解 #include<cstdio>#include<cstring>#include<algorithm>#inc ...
- 洛谷 1012 拼数(NOIp1998提高组)
[题解] 我们要做的就是把这些数排序.排序的时候判断两个数是否交换的方法,就是把这两个数相接形成两个长度相同的数字,比较这两个数字的大小. #include<cstdio> #includ ...
随机推荐
- My time is limited
Your time is limited, so don't waste it living someone else's life. Don't be trapped by dogma - whic ...
- 分布式Redis深度历险-Cluster
本文为分布式Redis深度历险系列的第三篇,主要内容为Redis的Cluster,也就是Redis集群功能. Redis集群是Redis官方提供的分布式方案,整个集群通过将所有数据分成16384个槽来 ...
- VMware——安装CentOS
VMware——安装CentOS 摘要:本文主要记录了在VMware虚拟机里安装CentOS的步骤. 下载操作系统 可以从下面的镜像地址去下载各种版本的CentOS,此次安装使用的版本是7.2: ht ...
- Arduino leonardo+esp8266-01作服务端与APP进行数据通信
esp8266-01调试 一.硬件设备 1.USB转TTL 2.esp8266-01 3.杜邦线 4.电脑 二.接线 ESP8266 TTL-USB VCC VCC(最好选择3.3V) CH_PD V ...
- 几种高效的Java工具类推荐
本文将介绍了十二种常用的.高效的Java工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类. 在开发中,使用这些工具类,不仅可以提高编码效率,还 ...
- c++和c动态申请二维数组
这是我面试中遇到的一道题,用c和c++分别申请一个二维数组,int **res,要求申请后的可以使用res[3][4]这一类防存方式. 这个是没有错误检查的版本. 答案: c++语言的版本 int * ...
- Redis缓存和MySQL数据一致性方案(转)
需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...
- rhel7学习第一天
今天是在线学习刘遄老师<Linux就该这么学>的第一天,对Linux的发展和优越性有了进一步的了解.
- java XML解析防止外部实体注入
/** * 增加防止部实体注入逻辑 * <功能详细描述> * @param reader * @throws SAXException * @see [类.类#方法.类#成员] */ pu ...
- 过滤身份证号和grep复习
一.把身份证号过滤出来 我们还是从一道面试题说起. 请从test.txt文件当中过滤出正确的的身份证号码 [root@localhost test.dir]# cat test.txt 赵 37083 ...