问题 A: 整数连接
时间限制: 1 Sec 内存限制: 128 MB提交: 246 解决: 57
[ 提交][ 状态][ 讨论版]
题目描述
设有
n
个正整数,将它们联接成一排,组成一个最小的多位整数。例如,
3
个整数
32
,
3
,
21
连接成的最小整数为:
21323
。
既然这是第一个题,那就要简单一点,不然很多参赛选手会很伤心的,因此,我特地将这个题目简化了一下,限定
n
个正整数的取值为1至
99
之间的正整数。
输入
先输入正整数个数
n
的值(
1<=n<=50
);
然后输入
n
个正整数(取值范围为
1~99
)。
输出
输出
n
个正整数连接而成的最小整数。
样例输入
3 32 3 21
样例输出
21323
提示
#include<iostream>
#include<cstring>
using namespace std;
bool compare(char a[],char b[]){
int lena=strlen(a);
int lenb=strlen(b);
int min1=lena>lenb?lenb:lena;
for(int i=0;i<min1;i++)
{
if(a[i]>b[i])
return true;
if(a[i]<b[i])
return false;
}
if(lena==1){
if(a[0]>b[1])
return true;
else
return false;
}
if(lenb==1){
if(b[0]>a[1])
return false;
else
return true;
}
return false;
}
char s[52][10];
int n;
void bubble()
{
int i,j,flag;
char temp[12];
for(i=0;i<n-1;i++)
{
flag=1;
for(j=0;j<n-i-1;j++)
{
if(compare(s[j],s[j+1]))
{
strcpy(temp,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],temp);
flag=0;
}
}
}
}
int main()
{
while(cin>>n){
int i;
for(i=0;i<n;i++)
cin>>s[i];
bubble();
for(i=0;i<n;i++)
cout<<s[i];
cout<<endl;
}
return 0;
}