设有n个正整数,将它们联接成一排,组成一个最小的多位整数
设有n个正整数,将它们联接成一排,组成一个最小的多位整数。
程序输入:n个数
程序输出:联接成的多位数
例如:
n=2时,2个整数32,321连接成的最小整数为:32132,
n=4时,4个整数55,31,312, 33 联接成的最小整数为:312313355
[题目要求]
1. 给出伪代码即可,请给出对应的文字说明,并使用上面给出的例子试验你的算
法。
2. 给出算法的时间空间复杂度。
3. 证明你的算法。(非常重要)
写个简单的情况算法:对于 输入的数位数 小于等于3位算法
#include<iostream>
#include<string.h>
#include<string>
#include<vector>
#include <algorithm>
using namespace std;
bool cmp(string x,string y)
{
const char *str1=x.c_str();
const char *str2=y.c_str();
if (*str1!=*str2) return *str1<*str2;
str1++;str2++;
if (*str1!=*str2) return *str1<*str2;
str1++;str2++;
if (*str1<*str2) return *str1>*str2;
// return x>y;
}
int main()
{
int count=0;
vector<string> v;
int a[]={55,31,312,33};
// char *str[100];
// string str[100];
char str[100];
for(int i=0;i<sizeof(a)/sizeof(int);i++)
{
itoa(a[i],str,10);
v.push_back(str);
}
sort(v.begin(),v.end(),cmp);
vector<string>::iterator it;
for(it=v.begin();it!=v.end();it++)
count++;
for (int k=0;k<count;k++)
{
cout<<v[k]<<endl;
}
for(int j=1;j<count;j++)
{
v[0].append(v[j]);
}
int result=atoi(v[0].c_str());
cout<<"结果"<<result<<endl;
return 0;
}
主要思想:把整数变成字符串,然后插入vector中,使用sort算法排序,自定义排序方式,即可!