问题:

设有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++)的更多相关文章

  1. P1012 拼数

    P1012 拼数 输入输出样例 输入样例 3 13 312 343 输出样例 34331213 注意 当你输入: 6321 32 407 135 13 217 应该输出: 40732321217135 ...

  2. 【洛谷p1012】拼数

    (今天yuezhuren大课间放我们出来了……) (另外今天回了两趟初中部) 拼数[传送门] 洛谷算法标签: (然鹅这两个学的都不好,能过真的how strange) 开始的时候没读题啊,直接暴力so ...

  3. 洛谷 P1012 拼数

    P1012 拼数 标签 字符串 排序 NOIp提高组 1998 云端 难度 普及- 时空限制 1s / 128MB 题目描述 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例 ...

  4. NC16783 [NOIP1998]拼数

    NC16783 [NOIP1998]拼数 题目 题目描述 设有 \(n\) 个正整数(\(n ≤ 20\)),将它们联接成一排,组成一个最大的多位整数. 例如:\(n=3\) 时,\(3\) 个整数 ...

  5. 1998 NOIP 拼数 string 和sort的新理解

    题目:https://www.luogu.org/problemnew/show/P1012 今天真是长了见识.这道题做了十几分钟,用模拟愣是调不出来.直到我看了题解——(当场去世)…… 题的意思是n ...

  6. 洛谷-拼数-NOIP1998提高组复赛

    题目描述 Description 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4 ...

  7. 洛谷P1012 拼数 string

    又是大水题... 这一题过水,令人无法接受...... 但是如果我们不知道string的一个神奇的性质的话,就会很难受. 我一开始手写 < 号,但是发现如果 string a 的前一部分恰好是 ...

  8. P【1012】拼数

    十分蒟蒻...(还是看别人的博才过的...) 题解 #include<cstdio>#include<cstring>#include<algorithm>#inc ...

  9. 洛谷 1012 拼数(NOIp1998提高组)

    [题解] 我们要做的就是把这些数排序.排序的时候判断两个数是否交换的方法,就是把这两个数相接形成两个长度相同的数字,比较这两个数字的大小. #include<cstdio> #includ ...

随机推荐

  1. 2019-9-18-WPF-如何调试-binding

    原文:2019-9-18-WPF-如何调试-binding title author date CreateTime categories WPF 如何调试 binding lindexi 2019- ...

  2. 【maven】搭建maven私服--基于CentOS7.6+docker

    一.docker环境 Docker version 19.03.5, build 633a0ea 二.安装并启动 Maven 私服的工具: Sonatype Nexus 1.搜索 2.下载镜像 doc ...

  3. DOIS2019大会,腾讯 DevOps 测试中台探秘

    WeTest 导读 腾讯WeTest受邀参加2019年DevOps 国际峰会,由WeTest产品负责人-殷柱伟老师分享了腾讯DevOps测试中台的实践经验与心得, 议题受到了现场听众及行业媒体的关注与 ...

  4. js中this由来

    这篇文章主要是讲述js中的this是什么?是怎么来的? 我们首先创建一个person对象,如下: var person = { name: 'wyh', age: 22, sayHi: functio ...

  5. php对象复制、clone、浅复制与深复制实例详解

    php对象复制.clone.浅复制与深复制实例详解 一.用clone(克隆)来复制对象$obj1 = new Object();$obj2 = clone $obj1;clone方法会触发对象里定义的 ...

  6. 春秋-SQLi题

    这道题挺好的 学到的知识 sprintf()构成的sql注入漏洞 题目环境今天做的时候坏了 留下这几篇博客学习 https://blog.csdn.net/nzjdsds/article/detail ...

  7. 多版本切换python

    Python 安装包去官网自行下载: https://www.python.org/downloads/mac-osx/ Mac os 自带python, 但我记得是python2.7版本 在选择安装 ...

  8. 安装教程-VMware 12 虚拟机软件的安装

    VMware 12 虚拟机软件的安装 1.实验描述 安装虚拟化软件,在物理机中搭建各种不同操作系统,为学习提供各种平台. 2.实验环境 物理机系统:Windows 10 企业版 3.实验工具 [VMw ...

  9. 学习CNN系列二:训练过程

    卷积神经网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间精确的数学表达式,只要用已知的模式对卷积神经网络加以训练,网络就具有输入.输出之间映射的 ...

  10. 使用Nginx+Openresty实现WAF功能

    什么是WAF Web应用防护系统(也称为:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针 ...