• 【CJOJ P1957】【NOIP2010冲刺十模拟赛】数字积木


    【NOIP2010冲刺十模拟赛】数字积木

    Description

    小明有一款新式积木,每个积木上都有一个数,一天小明突发奇想,要是把所有的积木排成一排,所形成的数目最大是多少呢? 你的任务就是读入n个数字积木,求出所能形成的最大数。

    Input

    共N+1行。
    第一行是一个整数n,接下来n行每行是一个正整数

    Output

    一个整数,为所能形成的最大整数。

    样例输入

    3
    13
    134
    343

    样例输出

    34313413

    数据范围

    对于30%的数据,n<=10,每个数<=10^3。
    对于50%的数据,n<=100。
    对于100%的数据,n<=1000,每个数<=10^200。

    题解

    这题其实不难,如果只用贪心的话也可以得到30分。当然,这题就是按照某一种方法来对这些读入的进行排序,数据又不大,直接写冒泡排序就行,所以只要自己写比较函数cmp即可AC。现在我们来看怎么写比较函数。也很简单,只要把两个待比较的串分别加在各自的后面,使得它们的长度相等,然后一位一位比较大小即可,所以程序也非常简短。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    bool cmp(string c,string s)
    {
    	    char ch;
    	    int l;
    	    string bc,bs;
    	    bc=c+s;
    	    bs=s+c;
    	    if(bc>bs)return true;
    	     else return false; 
    }//比较函数,只需要把两个待比较的串放在各自的后面然后比较大小就行了
    int n;
    string s[1001];
    int main()
    {
    	    cin>>n;
    	    for(int i=1;i<=n;++i)
    	         cin>>s[i];   
                         //读入部分 
            for(int i=1;i<=n;++i)
                 for(int j=i+1;j<=n;++j)
    	 	            if(!cmp(s[i],s[j]))swap(s[i],s[j]);
                         //排序部分,就是简单的冒泡
    	    for(int i=1;i<=n;++i) 
    	         cout<<s[i];
            cout<<endl;
    	    return 0;	
    }
    
  • 相关阅读:
    算法提高 道路和航路
    奇偶剪枝
    二分求值
    并查集--路径压缩
    Oracle数据库导入导出DMP文件
    Spring IoC的实现与思考(一)
    sql基础拾遗
    jquery事件函数的使用之focus
    Java动态代理之cglib
    Java se之动态代理
  • 原文地址:https://www.cnblogs.com/cjyyb/p/7196596.html
Copyright © 2020-2023  润新知