设有 n 个正整数 a1…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。 输入: 第一行有一个整数,表示数字个数 n。 第二行有 n 个整数,表示给出的 n 个整数 ai。 输出:一个正整数,表示最大的整数 N<=30 ; ai<=1e9。C++代码
时间: 2024-02-12 21:06:33 浏览: 28
以下是基于字符串比较的实现方式:
```c++
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
bool cmp(string a, string b) {
return a + b > b + a;
}
int main() {
int n;
cin >> n;
vector<string> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
sort(nums.begin(), nums.end(), cmp);
string ans = "";
for (int i = 0; i < n; i++) {
ans += nums[i];
}
cout << ans << endl;
return 0;
}
```
思路是先将所有数字转化成字符串,并且定义一个比较函数 `cmp`,使得两个字符串相加后的值更大的排在前面。然后将所有字符串按照这个比较函数从大到小排序,最后将它们连接起来即可。
相关问题
设有 nn 个正整数 a_1 \dots a_na 1 …a n ,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
将这些正整数按照一定的规则排序,然后将它们依次连接起来,就可以组成一个最大的整数。具体来说,对于两个正整数 a 和 b,如果将它们连接起来得到的数 ab 大于 ba,那么就将 a 排在 b 的前面,否则将 b 排在 a 的前面。按照这个规则对所有的正整数进行排序,然后将它们依次连接起来,就可以得到一个最大的整数。
用c++程序写以下程序:设有 n 个正整数 a1…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。 输入格式 第一行有一个整数,表示数字个数 n。 第二行有 n 个整数,表示给出的 n 个整数 ai。 输出格式 一个正整数,表示最大的整数
以下是用C++编写的程序:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(string a, string b) {
return a + b > b + a;
}
int main() {
int n;
cin >> n;
string nums[n];
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
sort(nums, nums + n, cmp);
string res = "";
for (int i = 0; i < n; i++) {
res += nums[i];
}
if (res[0] == '0') {
cout << "0" << endl;
return 0;
}
cout << res << endl;
return 0;
}
```
这个程序的主要思路是将所有数字转换成字符串,并将它们按照一定的规则排序,然后将它们连接起来形成一个最大的整数。具体来说,我们定义一个比较函数 `cmp`,它的返回值表示两个字符串的连接顺序。然后我们使用 `sort` 函数将所有字符串排序,最后将它们连接起来即可。需要注意的是,如果最大的整数是0,我们需要特殊处理一下。