当前位置: 代码迷 >> C语言 >> 组数问题
  详细解决方案

组数问题

热度:445   发布时间:2007-06-29 19:02:38.0
组数问题

组数问题!
设有n个正整数(n<=20),将它们联成一排,组成一个最大的多位数。程序输入:n,程序输出:n个书连接成的多为位数。
以下是设计思路:
可以将问题这样变化一下:
比如我输入的是123,2,33,1006,12这几个数
我先找到最大的数字位数为四位,再将所有的数字变为四位数:
1230,2000,3300,1006,1200
然后进行排序
3300,2000,1230,1200,1006
这样将后面加上的0去掉的序列就是最大数字了
于是连成的最大的数字就是
332123121006
请哪位高手帮我写出这个程序!

搜索更多相关的解决方案: 正整数  最大的  1230  

----------------解决方案--------------------------------------------------------
我先找到最大的数字位数为四位,再将所有的数字变为四位数:
1230,2000,3300,1006,1200
然后进行排序
3300,2000,1230,1200,1006
这样将后面加上的0去掉的序列就是最大数字了

这步可以换一下吧``

实际就是比较每一个数的第一位数的大小`染后排序``输出``

再思考下`
----------------解决方案--------------------------------------------------------
以下是引用死了都要C在2007-6-29 19:12:18的发言:
我先找到最大的数字位数为四位,再将所有的数字变为四位数:
1230,2000,3300,1006,1200
然后进行排序
3300,2000,1230,1200,1006
这样将后面加上的0去掉的序列就是最大数字了

这步可以换一下吧``

实际就是比较每一个数的第一位数的大小`染后排序``输出``

再思考下`

那如果几个数第一位相等了怎么搞啊?


----------------解决方案--------------------------------------------------------
相等后``可以比第2位啊`


----------------解决方案--------------------------------------------------------

把它们看成一整数来比较。


----------------解决方案--------------------------------------------------------
我现在只遍了一点点
我明天下午来继续编``
明天上午要考试```
我现在要回去复习``


----------------解决方案--------------------------------------------------------

最后的1200是怎么变出来的 没看懂


----------------解决方案--------------------------------------------------------

问题已经解决```

程序代码:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

int srsj ( int * ) ;
void tyws ( int *, int *b, int c ) ;
void shellsort ( int *, int *w, int n ) ;


int main ( )
{
int i, c ;
int s[20] ;
int b[20] ;

c = srsj (s) ; /*输入我们要输入的数据<=20个*/

tyws (s,b,c) ; /*将所以数转换为4位,不足的右边补上0*/

printf ("\n\n你输入的数为:\n"); /*将我们输入的数显示出来*/
for ( i=0; i<c; i++ )
printf ("%ld.", s[i]);

shellsort ( b,s,c ) ; /*进行排序操*/

printf ("\n") ;

printf ("输出结果为:\n") ; /*输出结果*/
for ( i=0; i<c; i++ )
printf ("%ld", s[i]);

getch();
return 0;
}


int srsj (int *s)
{
int i, c ;

printf ("请输入你想输入的数的个数:\n");
scanf (" %d", &c ) ;

system ("cls") ;

printf ("请输入你想输入的数:\n");
for ( i=0; i<c; i++ )
scanf (" %ld", &s[i]);

return c ;
}


void tyws(int *s, int*b, int c) /*根据数的位数补0*/
{
int i ;

for ( i=0; i<c; i++ )
{
if ( s[i] < 10 )
b[i] = s[i]*1000 ;
else if ( (s[i] >= 10) && (s[i] < 100) )
b[i] = s[i]*100 ;
else if ( (s[i] >= 100 ) && (s[i] < 1000 ) )
b[i] = s[i]*10 ;
else b[i] = s[i] ;
}
}


/*这是SHELL排序算法```我在里面加上了对原始输入数据的排序``这样就对原来我们输入和扩展后的数同时排序*/
/*LZ若是看不懂下面的算法``不要紧下来研究``现在只要知道`它是用来排序的就可以了*/
void shellsort(int *v, int *w, int n)

{
int gap,i,j,temp;


for (gap = n/2; gap > 0; gap /= 2)

for (i = gap; i < n; i++)

for (j=i-gap; j>=0 && v[j]<v[j+gap]; j-=gap)
{

temp = v[j];
v[j] = v[j+gap];
v[j+gap] = temp;

temp = w[j];
w[j] = w[j+gap];
w[j+gap] = temp;

}
}



----------------解决方案--------------------------------------------------------
调试环境DEV++4.9.9.2

第一步:

----------------解决方案--------------------------------------------------------
回复:(fyxcj)组数问题
程序运行如下:

第一步:




第二步:




第三步:





OK``说实话`把我累安逸了````
我暂时找不到其他更简单的方法```不好意思啊``



----------------解决方案--------------------------------------------------------
  相关解决方案