编程练习————第一题

本文为作者原创,转载请附明原地址:https://mp.csdn.net/postedit/80085696

这是我在牛客网的在线编程找来的一道题。题目具体如下:

编程练习————第一题_第1张图片

这道题最大的问题是该如何比较那个数应该排在前面,如果是像这样的: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
小结:这道题学习了这个冒泡排序。



你可能感兴趣的:(编程练习)