- 题目描述
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
- 输入描述
有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),
第二行包含N个数(每个数不超过1000,空格分开)。
- 输出描述
每组数据输出一个表示最大的整数。
- 输入
2
12 123
4
7 13 4 246
- 输出
12312
7424613
- python通过代码
定义自己的比较函数 ,然后调用functools来将自己的比较函数使用到sort函数内
import functools
n = int(input())
a = input().split()
def mycmp(x,y):
if x + y > y + x: return 1
elif x + y == y + x: return 0
else: return -1
a.sort(key = functools.cmp_to_key(mycmp), reverse = True)
print("".join(a))
- 描述
实际上就是对字符串排序,从高到低输出字符串
采用字符串连接会很方便
自己定义比较函数需要使用functools.cmp_to_key
- c++通过代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <stdio.h>
using namespace std;
bool compare(string s1, string s2)
{
return (s1 + s2) > (s2 + s1);
}
int main()
{
int n;
cin >> n;
vector<string> sArray;
for(int i = 0;i < n;i ++){
string temp;
cin >> temp;
sArray.push_back(temp);
}
sort(sArray.begin(), sArray.end(), [](string s1, string s2){
return (s1 + s2) > (s2 + s1);
});
//sort(sArray.begin(), sArray.end(), compare);
for(string s:sArray){
cout << s;
}
return 0;
}
- 描述
可以直接用c++的匿名函数lambda函数[]来编写compare,与直接调用compare是一样的
匿名函数的例子
[](int x, int y) { return x + y; } // 隐式返回类型
[](int& x) { ++x; } // 没有return语句 -> lambda 函数的返回类型是'void'
[]() { ++global_x; } // 没有参数,仅访问某个全局变量
[]{ ++global_x; } // 与上一个相同,省略了()
可以指定返回的类型
[](int x, int y) -> int { int z = x + y; return z; }
Lambda函数可以引用在它之外声明的变量. 这些变量的集合叫做一个闭包. 闭包被定义在Lambda表达式声明中的方括号[]内. 这个机制允许这些变量被按值或按引用捕获.下面这些例子就是:
[] //未定义变量.试图在Lambda内使用任何外部变量都是错误的.
[x, &y] //x 按值捕获, y 按引用捕获.
[&] //用到的任何外部变量都隐式按引用捕获
[=] //用到的任何外部变量都隐式按值捕获
[&, x] //x显式地按值捕获. 其它变量按引用捕获
[=, &z] //z按引用捕获. 其它变量按值捕获