题目描述
设有 n 个正整数 a_1 ... a_n,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入格式
第一行有一个整数,表示数字个数 n。
第二行有 n 个整数,表示给出的 n 个整数 a_i。
输出格式
一个正整数,表示最大的整数
样例 #1
样例输入 #1
3
13 312 343
样例输出 #1
34331213
样例 #2
样例输入 #2
4
7 13 4 246
样例输出 #2
7424613
提示
对于全部的测试点,保证 1 <= n <= 20,1 <= a_i <= 10^9。
这道题虽然是排列数字,但是用字符串来排序更简单一些。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int cmp(string s1, string s2)
{
return s1 + s2 > s2 + s1;
}
int main()
{
int n;
cin >> n;
string s[25];
for (int i = 0; i < n; i++)
{
cin >> s[i];
}
sort(s, s + n, cmp);
for (int i = 0; i < n; i++)
cout << s[i];
}
再给一些字符串字典序用法。
在计算机编程中,可以对字符串按照字典序(字符的ASCII码值)进行排序,或者使用自定义的比较函数来实现特定的排序规则。
在大多数编程语言中,都提供了排序函数或排序库,可以直接对字符串数组进行排序。例如,C++中可以使用std::sort
函数来对字符串数组进行排序,如前面给出的代码所示。
示例1:按字典序排序(默认的字符串排序方式)
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
string arr[] = {"banana", "apple", "orange", "grape"};
int n = sizeof(arr) / sizeof(arr[0]);
sort(arr, arr + n); // 默认按字典序排序
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
输出结果:
apple banana grape orange
示例2:使用自定义的排序规则(按字符串长度降序排序)
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(string a, string b) {
return a.length() > b.length(); // 按字符串长度降序排序
}
int main() {
string arr[] = {"banana", "apple", "orange", "grape"};
int n = sizeof(arr) / sizeof(arr[0]);
sort(arr, arr + n, cmp); // 使用自定义的排序规则
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
输出结果:
banana orange apple grape
在这个示例中,我们定义了一个自定义的比较函数cmp
,它按照字符串长度的降序对字符串进行排序。
无论是按字典序还是自定义规则排序,字符串排序在编程中是一个常见且重要的操作。
大家对这句int n = sizeof(arr) / sizeof(arr[0]);是不是有疑问呢?
在C++中,数组的大小是固定的,一旦定义了数组,其大小就无法改变。所以,有时候我们需要知道数组中元素的个数,以便在后续的操作中进行循环遍历等操作。
上述语句中,arr
是一个数组,sizeof(arr)
表示整个数组所占用的字节数,而 sizeof(arr[0])
表示数组中单个元素所占用的字节数。通过将整个数组的字节数除以单个元素的字节数,就可以得到数组中元素的个数。
例如,如果有一个整型数组 int arr[5];
,那么 sizeof(arr)
将返回整个数组所占用的字节数,假设为 20
字节(假设 int 类型占用 4 个字节)。而 sizeof(arr[0])
将返回单个元素 int
所占用的字节数,为 4
字节。因此,计算得到的 n
就是 20 / 4 = 5
,表示数组中有 5 个元素。
在上述代码中,n
表示数组 arr
中元素的个数,以便在后续的操作(比如循环遍历)中使用。这种写法在不知道数组大小或者数组大小可能发生变化的情况下特别有用。