数组--排序--组成最大数

来源:互联网 发布:傣族语言翻译软件 编辑:程序博客网 时间:2024/06/04 18:02

【题】

组成最大数


任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。

输入: 自然数 n

输出: 各位数字组成的最大数

 测试输入关于“测试输入”的帮助期待的输出关于“期待的输出”的帮助时间限制关于“时间限制”的帮助内存限制关于“内存限制”的帮助额外进程关于“{$a} 个额外进程”的帮助测试用例 1以文本方式显示
  1. 1593↵
以文本方式显示
  1. 9531↵
1秒64M0
【分析】

很显然,这是个排序的题。先用冒泡排序实现,很简单代码就不写了。

【代码】

冒泡排序的代码在我的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;}

【运行截图】