011--c数组--排序--组成最大数
组成最大数
任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。
输入: 自然数 n
输出: 各位数字组成的最大数
很显然,这是个排序的题。先用冒泡排序实现,很简单代码就不写了。
【代码】
冒泡排序的代码在我的Blog:http://blog.csdn.net/debug__boy/article/details/8170580中,代码的58-70行。
【多说一点】
这里提供一稍稍带点技巧的实现方法,不需要排序,利用数字0~9一次递增(排好序)的规律,直接得出结果。
代码如下:
- #include "stdio.h"
- int main(int argc, char **argv)
- {
- char ch;
- int arr[10] = {0}; //存储各个数字出现的次数,初始化为0
- //统计各个数字出现的次数
- while(1)
- {
- ch = getchar();
- if (ch == '\n')
- {
- break;
- }
- arr[ch - '0']++;
- }
- int i, j;
- //输出各个数字出现的次数
- for (i = 9; i >= 0; i--)
- {
- printf("数字%d 出现%d次.\n", i, arr[i]);
- }
- //输出这些数组成的最大的数
- printf("\n组成的最大的数:\n");
- for (i = 9; i >= 0; i--)
- {
- for(j = arr[i]; j > 0; j--)
- printf("%d", i);
- }
- printf("\n");
- //输出这些数组成的最小的数,注意:0不输出
- printf("\n组成的最小的数:\n");
- for (i = 1; i <= 9; i++)
- {
- for(j = arr[i]; j > 0; j--)
- printf("%d", i);
- }
- printf("\n");
- return 0;
- }
【运行截图】