拼数(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 ...
随机推荐
- 在Linux系统中运行并简单的测试RabbitMq容器
以前使用的是Windows下面的RabbitMq,需要先安装 Erlang的语言环境等,这次直接在Linux中的Docker容器来测试一下 1:docker配置RabbitMq的指令 docker r ...
- 避免HBase PageFilter踩坑,这几点你必须要清楚
有这样一个场景,在HBase中需要分页查询,同时根据某一列的值进行过滤. 不同于RDBMS天然支持分页查询,HBase要进行分页必须由自己实现.据我了解的,目前有两种方案, 一是<HBase权威 ...
- 安装Yapi时,出现json-schema-faker模块找不到问题
今天换了一台机器按以前的方式安装Yapi工具时,竟然出现了错误. 一 安装yapi时,出现了下面的报错,一开始以为没安装json-schema-faker模块.后面通过找资料,发现是权限问题, 使用c ...
- Linux nodejs 安装以及配置环境
从官网中下载nodejs 打开官网 https://nodejs.org/en/download/ 复制拿到链接,下载nodejs wget https://nodejs.org/dist/v10.1 ...
- 「白帽挖洞技能提升」ThinkPHP5 远程代码执行漏洞-动态分析
ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,在保持出色的性能和至简代码的同时,也注重易用性.但是简洁易操作也会出现漏洞,之前ThinkPHP官方修复了一个严重的远程代码执行漏 ...
- Visual Studio 项目在修改项目版本时,使用 * 通配符报错
CS8357 C# The specified version string contains wildcards, which are not compatible with determinis ...
- swift混编
http://blog.csdn.net/fengsh998/article/details/34440159
- 【Idea】idea中编译后无法提示错误信息的解决方案
- Windows远程连接其他主机
一.远程主机开启允许被远程连接 1. 右键计算机 --> 属性 --> 远程设置 2. 默认是不允许远程桌面的, 在这里我们勾选开启 3. 远程主机设置完成 二.客户机连接设置 1. wi ...
- 使用阿里云生成的pem密钥登录
我用的阿里云生成的ssh密钥,服务器上已有公钥,私钥为.pem文件,下载在本地,网上都说要转换为.ppk再用,其实用secure不必转换 一..pem和.ppk文件区别 .pem 密钥通用格式 .p ...