在线编译器 C

#include <stdio.h> int main(){ int x,count=0; scanf("%d",&x); while(x>0){ count++; x=x/10; } int a[count]; for(int i=0;i<count-1;i++){ int num_min=i; for(int j=i+1;j<count;j++){ if(a[i]<a[j]){ num_min=j; } } if(num_min!=i){ int temp=a[num_min]; a[num_min]=a[i]; a[i]=temp; } } for(int i=0;i<count;i++){ printf("%d",a[i]); } return 0; }
这段代码试图做两件事:先读取一个整数并统计它的位数,然后创建一个数组并尝试进行排序,最后输出数组。但代码存在几个问题。

首先,统计位数后,你创建了数组 `a[count]`,但数组中的元素并没有被初始化,也就是说数组里存的是随机值。你只是声明了数组,但没有把数字的每一位放进去。

其次,排序部分的逻辑有误。你写的是 `if(a[i]<a[j])`,这表示如果当前元素小于后面的元素就交换,这是降序排序的条件。但你的变量名 `num_min` 暗示你想找最小值,这里逻辑不一致。另外,你只比较了 `a[i]` 和 `a[j]`,而不是用 `num_min` 来记录真正的最小值位置。

- 你需要先把数字的每一位提取出来存入数组,比如用循环和取余运算。
- 排序时,注意选择排序的正确写法:应该用 `a[num_min]` 与 `a[j]` 比较,而不是 `a[i]` 与 `a[j]` 比较。