• 洛谷 P1012 拼数 [字符串]


    题目描述

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

    例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213

    又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613

    输入输出格式

    输入格式:

    第一行,一个正整数n。

    第二行,n个正整数。

    输出格式:

    一个正整数,表示最大的整数

    输入输出样例

    输入样例#1:
    3
    13 312 343
    
    输出样例#1:
    34331213

    [分析]:

    首先我们可以证明最大的答案字典序也一定最大。

    并且大家一定都知道C++的string类,然而可能不知道的是,这个类还定义了'<'运算符和'+'运算符。

    而<的定义为按字典序比较,+的定义为字符串直接连接。

    恰好符合此题题意。

    [代码]:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=25;
    int n;
    string in[maxn];
    bool cmp(const string &a,const string &b)
    {
        return a+b > b+a;
    }
    int main()
    {
        ios::sync_with_stdio(0);
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>in[i];
        sort(in+1,in+1+n,cmp);
        for(int i=1;i<=n;i++)
             cout<<in[i];
        cout<<endl;
        return 0;
    }
    View Code
    #include <iostream>
    #include <algorithm> //所需函数
    #include <cstring>
    #include <string>
    using namespace std;
    int n;
    string s[22];
    string ans = "0";
    int main()
    {
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> s[i];
        do
        {
            string t;
            for (int i = 1; i <= n; i++)
                t = t + s[i]; //生成每一个数字(字符串)
            if (t > ans)
                ans = t; //字符串可以直接比较
        }while (next_permutation(s+1,s+n+1)); //全排列
        cout << ans << endl;
        return 0;
    }
    next_permutation
  • 相关阅读:
    多层交换概述
    多层交换MLS笔记2
    多层交换MLS笔记1
    RSTP Proposal-Agreement
    RSTP Note
    保护STP
    优化STP
    Cisco STP Note
    25、C++的顶层const和底层const
    43、如何用代码判断大小端存储
  • 原文地址:https://www.cnblogs.com/Roni-i/p/7649667.html
Copyright © 2020-2023  润新知