• 洛谷P1012拼数——字符串排序


    题目描述

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

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

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

    输入输出格式

    输入格式:

    第一行,一个正整数n。

    第二行,n个正整数。

    输出格式:

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

    The first glance I saw this problem,it’s so cushy;结果WA了一个点;sad……;

    仔细想想才发现问题所在,打个比方:4 和42 两个字符串的前一部分相同,而前半部分相同的字符串,位数小的“<"位数大的,因此在比较中 4<42 ,于是按照我第一次的思路,把大的放在前面,于是得到了424,然而并不是这样,而应该是442,这样组合起来最大。

    所以这时用sort对string数组排序时需要手写comp函数,

    #include<cstdio>
    #include<cmath>
    #include<queue>
    #include<deque>
    #include<vector>
    #include<stack>
    #include<algorithm>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<iostream>
    #define LL long long
    using namespace std;
    string num[22];
    bool cmp(string a,string b){
        return a+b < b+a; 
    }
    int main(){
        int n;
        scanf("%d",&n);
        for(int i = 1;i <= n;i++)
           cin>>num[i];
        sort(num+1,num+n+1,cmp);
        for(int i = n;i >= 1;i--)
           cout<<num[i];
        return 0;
    }
  • 相关阅读:
    day50——前端简介、标签分类、常用标签
    day46——约束条件、表与表建 关系、修改表的完整语法
    day45——存储引擎、数据类型、约束条件
    day44——存储数据的发展、数据库分类、mysql
    Ⅰ:计算机核心基础
    Ⅶ:基本数据类型及内置方法
    Ⅶ:作业
    Ⅵ:深浅copy
    Ⅵ:流程控制
    Ⅳ:运算符
  • 原文地址:https://www.cnblogs.com/syx-799/p/6392608.html
Copyright © 2020-2023  润新知