题目描述
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
输入描述:
有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。
输出描述:
每组数据输出一个表示最大的整数。
示例1
输入
2 12 123 4 7 13 4 246
输出
12312 7424613
我用的C++,解答是:
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
bool big_to_small(string s1,string s2)
{
return (s1+s2)>(s2+s1);
}
int main()
{
int num;
vector<string> input;
string in;
while(cin>>num)
{
for(int i=0;i<num;i++)
{
cin>>in;
input.push_back(in);
}
}
sort(input.begin(),input.end(),big_to_small);
for(vector<string>::iterator it=input.begin();it!=input.end();it++)
cout<<*it;
}
若有好的方法欢迎交流!
备注:
C++ sort排序函数用法
sort类函数:
函数名 | 功能描述 |
---|---|
sort | 对给定区间所有元素进行排序 |
stable_sort | 对给定区间所有元素进行稳定排序 |
partial_sort | 对给定区间所有元素部分排序 |
partial_sort_copy | 对给定区间复制并排序 |
nth_element | 找出给定区间的某个位置对应的元素 |
is_sorted | 判断一个区间是否已经排好序 |
partition | 使得符合某个条件的元素放在前面 |
stable_partition | 相对稳定的使得符合某个条件的元素放在前面 |
需要头文件<algorithm>
语法描述:sort(begin,end,cmp),cmp参数可以没有,如果没有默认非降序排序。
以int为例的基本数据类型的sort使用
#include<iostream> #include<algorithm> #include<cstring> using namespace std; int main() { int a[5]={1,3,4,2,5}; sort(a,a+5); for(int i=0;i<5;i++) cout<<a[i]<<' '; return 0; }
因为没有cmp参数,默认为非降序排序,结果为:
1 2 3 4 5
若设计为非升序排序,则cmp函数的编写:
bool cmp(int a,int b)
{
return a>b;
}