码迷,mamicode.com
首页 > 其他好文 > 详细

2018.8.19 2018暑假集训之maxnum

时间:2018-08-19 20:09:25      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:stream   space   最大的   避免   can   ora   一个   重点   今天   

昨天去做志愿服务去了没写成Q_Q

今天再来一道

先放题面描述


设有n个正整数(n<=20),将它们联成一排,组成一个最大的多位数

设有n个正整数(n<=20),将它们联成一排,组成一个最大的多位数。   例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213   又如:n=4时,4个整数7,13,4,246联接成的最大整数为7424613

程序输入:n 以及n个数 

程序输出:n个数联接成的多位数。

样例输入:   4

      7 13 4 246

样例输出:7424613


做了这个题突然感觉所有题目的样例都十分的水

想到字符串从大到小排序输出有没有?

然而这个题正解并不是这样(一个点也过不了)

举个栗子

321和32哪个应该排在前面??

显然32应该排在前面所以不能用字典序排序

然而我们可以换一种排序方法

简而言之就是枚举哪个串放在前面的字典序最大(因为32132和32321位数一样

上代码


 

#include<iostream>
#include<algorithm>
using namespace std;
string a[150];
int n;
bool flag1;
bool cmp(string,string);
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];//数据太小cin就能过
        if(a[i]!="0")flag1=1;//处理全都是0的情况,避免输出一大堆0(然鹅好像并没有这种数据) 
    }
    sort(a+1,a+n+1,cmp);
    if(!flag1)putchar(0);
    else for(int i=1;i<=n;i++)cout<<a[i];
    return 0;
}
bool cmp(string a,string b)
{
    return a+b>b+a;//这里是重点!!
    //连接两个字符串后得到的两个新串明显位数一样,所以可以直接比较字典序 
    //注意大的在前!! 
}

满满是坑的一道题啊

大家以后一定想好再写

2018.8.19 2018暑假集训之maxnum

标签:stream   space   最大的   避免   can   ora   一个   重点   今天   

原文地址:https://www.cnblogs.com/qxds/p/9502242.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!