• 题目1504:把数组排成最小的数


    题目描写叙述:
    输入一个正整数数组。把数组里全部数字拼接起来排成一个数,打印能拼接出的全部数字中最小的一个。比如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
    输入:
    输入可能包括多个測试例子。
    对于每一个測试案例,输入的第一行为一个整数m (1<=m <=100)代表输入的正整数的个数。
    输入的第二行包含m个正整数。当中每一个正整数不超过10000000。
    输出:
    相应每一个測试案例,
    输出m个数字能排成的最小数字。
    例子输入:
    3
    23 13 6
    2
    23456 56
    例子输出:
    13236

    2345656

    //方法一

    #include <iostream>
    #include<string>
    #include<vector>
    #include<cstdlib>
    #include<algorithm>
    using namespace std;
    /*
     *字符串比較,长度同样直接比較
     *长度不同一时候,先比較长度同样的部分,若长度同样的部分不同样,则直接进行比較就可以;
     *长度同样的部分同样的,再将长字符串的剩下的部分与短字符串比較;
     *另外,排序函数的使用须要注意到地方还有非常多,qsort(str,0,str+n,cmp);非常美丽的使用方法。而用容器则直接用begin(),end()函数替代
     *cmp比較函数的设计。注意返回值为int类型
     *字符串的比較。用标准模板库里面的函数真的是相当方便。各种函数用的好了非常方便。用的不好,错误一堆
     */
    bool cmp(string str1,string str2)
    {
        int flag;
        bool isBig;
        int len1=str1.length(),len2=str2.length();
        if(len1==len2)
            flag=str1.compare(str2);
        else
        {
            if(len1<len2)
            {
                if(str2.compare(0,len1,str1)==0)
                {
                   isBig=cmp(str1,str2.substr(len1,len2-len1));
                   if(isBig)
                    return true;
                   else
                    return false;
                }
     
                else
                    flag= str1.compare(str2);
            }
            else
            {
                if(str1.compare(0,len2,str2)==0)
                {
                    isBig=cmp(str1.substr(len2,len1-len2),str2);
                    if(isBig)
                        return true;
                    else
                        return false;
                }
                else
                    flag= str1.compare(str2);
            }
        }
        if(flag==1)
            return false;
        else
            return true;
    }
    /*
     *整体思路:为了便于比較输入的数中的各位数字的大小。首先将输入的数字当成字符串输入;
     *输入结束后,将字符串按题目要求的规则进行排序。具体排序规则详见比較函数;
     *最后,将排序好的字符串直接输出就是所要求的数字,然后输出;
     *bingo!

    */ int main() { int n; while(cin>>n) { string str; vector<string>vec; for(int i=0;i<n;i++) { cin>>str; vec.push_back(str); } sort(vec.begin(),vec.end(),cmp); vector<string>::iterator iter=vec.begin(); for(;iter!=vec.end();iter++) { cout<<*iter; } cout<<endl; } return 0; } /************************************************************** Problem: 1504 User: hndxztf Language: C++ Result: Accepted Time:170 ms Memory:1528 kb ****************************************************************/


    //方法二

    #include <iostream>
    #include<string>
    #include<vector>
    #include<algorithm>
    using namespace std;
    /*
     *首先将字符串进行拼接。再直接比較字符串
     *拼接后避免出现321>32>3的情况。那样就成了332321了
     */
    bool cmp(string str1,string str2)
    {
     
        string temp1=str1,temp2=str2;
        temp1.append(str2);
        temp2.append(str1);
        return temp1<temp2;
    }
    /*
     *整体思路:为了便于比較输入的数中的各位数字的大小,首先将输入的数字当成字符串输入。
     *输入结束后,将字符串按题目要求的规则进行排序,具体排序规则详见比較函数;
     *最后。将排序好的字符串直接输出就是所要求的数字,然后输出;
     *bingo!
     */
    int main()
    {
        int n;
        while(cin>>n)
        {
            string str;
            vector<string>vec;
            for(int i=0;i<n;i++)
            {
                cin>>str;
                vec.push_back(str);
            }
     
            sort(vec.begin(),vec.end(),cmp);
            vector<string>::iterator iter=vec.begin();
            for(;iter!=vec.end();iter++)
            {
                cout<<*iter;
            }
            cout<<endl;
        }
        return 0;
    }
     
    /**************************************************************
        Problem: 1504
        User: hndxztf
        Language: C++
        Result: Accepted
        Time:250 ms
        Memory:1528 kb
    ****************************************************************/

  • 相关阅读:
    脏读一
    Tomcat7基于Redis的Session共享实战二
    Tomcat7基于Redis的Session共享实战一
    SQL优化经验
    Java Collections.sort方法对list集合排序
    Redis应用场景一
    Redis 发布订阅用法
    关于消息队列的使用
    Mysql日常开发注意要点
    中药处方
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7200341.html
Copyright © 2020-2023  润新知