题目
排列组成最小数:给定数字0~9各若干个,按照任意顺序排列这些数字,但是必须全部使用。目标是使得排列后的数尽可能小(注意0不能做首位)。试编写相应程序。
输入样例:
5 8 5 5 1 1 0 0(输入8个数:两个0,两个1,三个5,一个8)
输出样例:
1015558
思路:
将不确定个数的数放入数组中,由小到大将数组中的数排列,最后将数组中第一个a[i]不等于0的数与a[0]的位置进行交换。
代码:
#include<stdio.h>
int main (void)
{
int n,a[100],i,j,temp;
char ch;
n=0;
//输入给定数字到数组中
while(ch!='\n'){
scanf("%d",&a[n]);
n++;
scanf("%c",&ch);
}
// 将数组中的数字从小到大排列
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(a[i]<a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
//将第一个非0a[i]与a[0]交换位置
for(i=0;i<n;i++){
if(a[i]>0){
temp=a[0];
a[0]=a[i];
a[i]=temp;
break;
}
}
for(i=0;i<n;i++){
printf("%d",a[i]);
}
return 0;
}