1. 程式人生 > >貪心+字串排序——拼數

貪心+字串排序——拼數

題目來源

洛谷P1012拼數

https://www.luogu.org/problem/show?pid=1012

題目描述

設有n個正整數(n≤20),將它們聯接成一排,組成一個最大的多位整數。

例如:n=3時,3個整數13,312,343聯接成的最大整數為:34331213

又如:n=4時,4個整數7,13,4,246聯接成的最大整數為:7424613

輸入輸出格式

輸入格式:

第一行,一個正整數n。

第二行,n個正整數。

輸出格式:

一個正整數,表示最大的整數

輸入輸出樣例

輸入樣例

3
13 312 343

輸出樣例

34331213

思路

貪心 數字大的儘量在前

程式碼(C++)

#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n;
string s[25];
bool cmp(string x,string y)
{
    int l1=x.size(),l2=y.size(),i=0;
    while(x[i]==y[i]&&i<l1&&i<l2)    i++;
    if(i==l1)
    {
        if(i==l2)    return 1;
        if(x[0]<=y[i]) return 0;
        return 1;
    }
    if(i==l2)
    {
        if(y[0]<=x[i]) return 1;
        return 0;
    }
    if(x[i]<y[i])    return 0;
    return 1;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>s[i];
    sort(s+1,s+n+1,cmp);
    for(int i=1;i<=n;i++)
        cout<<s[i];
    return 0;
}