设有n个整数(3≤n≤100),将这些整数拼接起来,可以形成一个最大的整数。
例如:n=3,三个整数分别为21 7 34, 拼接后最大的整数为: 73421
再比如:n=3,三个整数分别是1 10 110,拼接后最大的整数是:111010
输入格式
第一行一个整数n ,表示有n 个整数。
第二行n个整数,数与数之间用一个空格分隔。
输出格式
输出到屏幕 。一个拼接后的最大的整数。
样例输入
3
21 7 34
样例输出
73421
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <bits/stdc++.h>
using namespace std;
//int 转string
string intToString(int num) {
char p[255];
sprintf(p, "%d", num);
string s(p);
return s;
}
//string转int
int stringToint(const string&s) {
return atoi(s.c_str());
}
//多个数组合合并为最大数,注意要将数组长度传入,在函数内部数组参数会转为指针,从而求不出长度
void composeBiggest(int num[], int len) {
int tempNum;
string temp1, temp2;
for (int i = 0; i<len; i++) {
for (int j = i + 1; j<len; j++) {
temp1 = intToString(num[i]) + intToString(num[j]);
temp2 = intToString(num[j]) + intToString(num[i]);
if (stringToint(temp1) - stringToint(temp2)<0) {
tempNum = num[i];
num[i] = num[j];
num[j] = tempNum;
}
}
}
for (int i = 0; i<len; i++) {
cout << num[i];
}
}
int main() {
int a[110];
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
composeBiggest(a, n);
return 0;
}
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
//定义比较规则
bool compare(const int& a, const int& b)
{
return atoi((to_string(a) + to_string(b)).data()) > atoi((to_string(b) + to_string(a)).data()) ;//从大到小排序,使用字符串拼接
}
int main()
{
int a[10] = {2, 3, 30, 305, 32, 334, 40, 47, 5, 1};
vector<int> nums(a, a + 10);//输入一个整数数组
sort(nums.begin(), nums.end(), compare);//使用sort函数排序,自定义规则
for(auto x : nums)//从大到小输出,就是拼接成的最大整数
cout << x;
cout << endl;
return 0;
}
请问一下时间空间限制是什么?
我会再发一个问答,关注我去看看,谢谢大家