题目描述:
给输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。
样例输入1:
{2, 1}
样例输出1:
12
样例输入2:
{32, 321}
样例输出2:
32132
样例输入3:
{4589, 101,41425,9999}
样例输出3:
1014142545899999;
接口说明:
int smallestDigit(int a[],int nCount,char * strRst)
功能:将输入的数组排成最小的数
输入: int a[]:整型数组
int nCount:数组长度
char * strRst 返回值
输出:无
返回:成功返回0 异常返回-1
解题思路:
冒泡就能解决这个问题了。核心算法:
如果((A排在B后面形成的数)>(A排在B前面形成的数))做(A/B交换)
代码:
// 功能:将输入的数组排成最小的数
// 输入: int a[]:整型数组
// int nCount:数组长度
// char * strRst返回值
// 输出:
// 返回:成功返回0 异常返回-1
int smallestDigit(int a[],int nCount,char * strRst)
{
int temp,i,j;
int *p=a;
char str1[100],str2[100];
if(strRst==NULL)
return -1;
for(i=0;i<nCount-1;i++)
{
for(j=i+1;j<nCount;j++)
{
sprintf(str1,"%d%d",a[i],a[j]);
sprintf(str2,"%d%d",a[j],a[i]);
if (strcmp(str1,str2)>0)
{
temp=*(p+j);
*(p+j)=*(p+i);
*(p+i)=temp;
}
}
}
for(i=0;i<nCount;i++)
{
strRst+=sprintf(strRst,"%d",a[i]);
}
return 0;
}