问题:

设有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. VMware与 Device/Credential Guard 不兼容,解决办法及心得

    以下为心路历程,想要直接解决可以直接拉到最后看后续 百度要你取消Hyper-V功能,但我要用docker,以及一些相关的帖子都无效的情况下 https://blog.csdn.net/u0136677 ...

  2. vue-router 在项目中的使用

    一.下载vue-router npm install vue-router --save 二.编码 1.在项目中新建文件夹 router/index.js /* * 路由对象模块 * */ impor ...

  3. 深入浅出《设计模式》之工厂模式(C++)

    前言 模式介绍 在之前简单工厂模式中,我们介绍了简单工厂模式的缺陷是违背了开放-封闭原则.如果在面馆中添加了烤海参,那将会修改waiter工厂类.违背了类内封闭原则. 还以面馆为例,现在两种面,用一个 ...

  4. ubuntu 18.04 修改Apache默认目录

    ubuntu 18.04 修改Apache默认目录 安装是直接运行 sudu apt install apache2 安装之后要修改目录 vi /etc/apache2/sites-available ...

  5. 章节十四、9-Actions类鼠标悬停、滚动条、拖拽页面上的元素

    一.鼠标悬停 1.在web网站中,有一些页面元素只需要我们将鼠标指针放在上面就会出现被隐藏的下拉框或者其它元素,在自动化的过程中我们使用Actions类对鼠标进行悬停操作. 2.案例演示 packag ...

  6. MarkdownPad 2破解

    MarkdownPad 2 是一款较不错的Markdown编辑器,可快速将文本转换为美观的HTML/XHTML的网页格式代码,且操作方便,用户可以通过键盘快捷键和工具栏按钮来使用或者移除Markdow ...

  7. openstack 创建实例报错 **aborted: Failed to allocate the network(s), not rescheduling

    消息 Build of instance 6320b5f2-edc2-4e8e-b07c-0047f7ed8f6a aborted: Failed to allocate the network(s) ...

  8. java 获取安全随机字符

    private static final char[] CHAR_32 = new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', ...

  9. 3. gn入门

    Chromium是用gn和ninja进行编译的,即gn把.gn文件转换成.ninja文件,然后ninja根据.ninja文件将源码生成目标程序.gn和ninja的关系就与cmake和make的关系差不 ...

  10. jenkins部署报404错误

    环境:tomcat 7+jdk1.7+win10 64 jenkins_1.5.23 部署完成后服务器启动输入网址:http://192.168.3.100:8080/jenkins打开无法访问报40 ...