zoukankan      html  css  js  c++  java
  • 2018.8.19 2018暑假集训之maxnum

    昨天去做志愿服务去了没写成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;//这里是重点!!
        //连接两个字符串后得到的两个新串明显位数一样,所以可以直接比较字典序 
        //注意大的在前!! 
    }

    满满是坑的一道题啊

    大家以后一定想好再写

    /*====年轻人,瞎搞是出不了省一的,这就是现实====*/
  • 相关阅读:
    NSCache
    编译器 perforSelecter时 警告去除
    常用git命令
    LINUX系统自动化部署shell脚本
    个人工作总结10
    个人工作总结09
    个人工作总结-8
    个人工作总结07
    第八周学习进度
    对搜狗输入法的一些评价
  • 原文地址:https://www.cnblogs.com/qxds/p/9502242.html
Copyright © 2011-2022 走看看