[要求]
设有n个数(n<=20),将它们联成一排,组成一个最大的多位数.程序输入:n,程序输出:个联接成的多位数.
[提示]
以下是设计思路:
可以将问题这样变化一下:
比如我输入的是 123 2 33 1006 12 这样几个数字
我首先找出最大的数字的位数为四位,再将所有得数字变成四位数:
1230 2000 3300 1006 1200
然后进行排序
3300 2000 1230 1200 1006
这样将后面加上的0去掉的序列不就是最大数字吗?
于是最大数字就是
332123121006
搞出来的程序有点问题。数字一输多了就没办法正常运行了。大虾们帮忙看一下。谢谢~
main()
{
int i,j,m,t,n,f=1,d=1,max,a[20],c[20],e[20];
printf("the number of n=");
scanf("%d",&n);
if(n>20&&n<1)printf("error");
printf("input the number");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<n;i++)
{
if(max<a[i])max=a[i];
}
printf("max=%d\n",max);
/*求出数组a中元素的最大值*/
do
{
if(( max/10)!=0)
{
max/=10;
f++;
}
}
while((max/10)!=0);printf("f=%d\n",f);
/*计算出最大值的位数*/
for(i=0;i<n;i++)
{
e[i]=a[i];c[i]=a[i];
do
{
if((c[i]/10)!=0)
{
c[i]/=10;
d++;
}
}
while((c[i]/10)!=0);
for(m=0;m<f-d;m++)
e[i]=e[i]*10;
}
for(i=0;i<n;i++)printf("e=%d\n",e[i]);
printf("d=%d\n",d);
/*把与数组a相同的数组c中的元素变为与最大值位数相同的数组e*/
for(j=0;j<n-1;j++)
for(i=0;i<n-j;i++)
if(e[i]<e[i+1])
{t=e[i];e[i]=e[i+1];e[i+1]=t;
t=a[i];a[i]=a[i+1];a[i+1]=t;}
/*将数组e中的元素从大到小排序,而数组a与其成为相对应的顺序*/
for(i=0;i<n;i++)
printf("%d",a[i]);
}
[此贴子已经被作者于2007-7-20 19:43:40编辑过]