C语言求各位数字组成的最大数

Python016

C语言求各位数字组成的最大数,第1张

其实吧,这个程序的核心思路也可以换种说法(就是给一个数由大到小排列),这一点你做出来了。(一起探讨一下,我们一步步顺着来看看)

先来分析一下你那1100变成1001的问题(我用实际的过程让你看一下程序执行过程吧):

接下来是剥位置统计个数j,这一点很好。

(注意当前数组的位置)

然后实现了一次循环之后:

第二重循环m=1执行完了之后实现了第一次互换:

此时1001就没再发生变化……

这就是1100变成1001的过程,然后我们再来看一下这个问题所在,并思考一下要怎么改?

改了一下:

#include<stdio.h>

int main()

{

    int i,n,m,x,t,j

    int a[10]

    scanf("%d",&n)

    for(i=0,j=0n>0i++)

    {

        t=n%10

        a[i]=t

        n=n/10

        j++

    }

    /*

for(i=0i<=j-2i++)

    {

        for(m=i+1m<=j-1m++)

        {

            if(a[i]<a[m])

            {

                x=a[i]

                a[i]=a[m]

                a[m]=x

            }

        }

    }

顺序法*/

/*

for(i=1i<ji++)

    

        for(m=0m<j-1m++)

        

            if(a[m]<a[m+1])

            {

                x=a[m]

                a[m]=a[m+1]

                a[m+1]=x

            }

冒泡法*/

/*不过你本人的程序还是以修改最少情况为佳~*/

for(i=0i<ji++)

    {

        for(m=1m<jm++) 

        {

            if(a[m]>a[m-1])

            {

                x=a[m]

                a[m]=a[m-1]

                a[m-1]=x

            }

        }

    }

    for(i=0i<ji++)

    {

        printf("%d",a[i])

    }

    printf("\n")

return 0

}

其实我感觉你没有读懂题目的考察点,你代码我运行也成功,但是没注释,有点晕

这题目真正考察的我感觉是冒泡排序

char h[200]

int i,n=0,j

char t

gets(h)

for(i=0h[i]!='\0'i++)

n++

for(i=0i<ni++)

{

for(j=ij<nj++)

{

if (h[j]>h[i])

{

t = h[i]

h[i] = h[j]

h[j] = t

}

}

}

printf("%s\n",h)