本文为作者原创,转载请附明原地址:https://mp.csdn.net/postedit/80085696
这是我在牛客网的在线编程找来的一道题。题目具体如下:
这道题最大的问题是该如何比较那个数应该排在前面,如果是像这样的:77与34,或者这样:321与12。你发现这些都很容易排好序,就直接比较大小嘛!so easy~但是如果位数较少但数字较大的数呢?比如9跟10,明显嘛9应该排在前面,可但是10比9大呀。所以我们就不能用直接比较大小的办法了。
所以问题来了,我们该如何解决呢?我们可以这样做,这不是要比较两个数嘛,我们把两个数分别前后接在一起组成两个新的数再进行比较。比如对于9跟10分别组成910、109,显而易见910大,所以通过这两个新组成的数的大小关系来判断排序关系,然后运用冒泡排序进行排序后再输出即可。基本思想是这样,下面来具体看代码:
/***************************************
author:刘顺
date:2018-04-15
function:
设一个整数,将他们连成一排,组成一个最大的多位整数。
如n=3时,3个整数13,312,343连成的 最大整数为34331213.如n=4时,
4个整数7,13,4,246连接成的最大整数为7424613.
***************************************/
#include
#define CHANGE 1
#define NOCHANGE -1
int compare(int a,int b)
{
int la=10,lb=10;
while(a/la)
{
la*=10;
}
while(b/lb)
{
lb*=10;
}
if( ((a*lb+b)-(b*la+a))<0 )
return CHANGE;
return NOCHANGE;
}
int main(void )
{
while(1)
{
int count,swap,data[100];
int i,j;
printf("请输入正整数N:\n");
if(scanf("%d",&count)<0) //个数
{
printf("scantf error");
}
if(count<=0)
{
printf("请输入一个正整数\n");
continue;
}
printf("请输入%d个整数(每个以空格隔开)\n",count);
for ( int i = 0;i < count ; i++ ) //每一个整数
{
scanf("%d",&data[i]);
}
for(j=0;j
小结:这道题学习了这个冒泡排序。