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