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

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

组成最大数
 

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

输入: 自然数 n

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

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

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

【代码】

冒泡排序的代码在我的Blog:http://blog.csdn.net/debug__boy/article/details/8170580中,代码的58-70行。

【多说一点】

这里提供一稍稍带点技巧的实现方法,不需要排序,利用数字0~9一次递增(排好序)的规律,直接得出结果。

代码如下:

[cpp] view plain copy
 
  1. #include "stdio.h"  
  2.   
  3. int main(int argc, char **argv)  
  4. {  
  5.     char ch;  
  6.     int arr[10] = {0};      //存储各个数字出现的次数,初始化为0  
  7.   
  8.     //统计各个数字出现的次数  
  9.     while(1)  
  10.     {  
  11.         ch = getchar();  
  12.         if (ch == ' ')  
  13.         {  
  14.             break;  
  15.         }  
  16.         arr[ch - '0']++;  
  17.     }  
  18.   
  19.     int i, j;  
  20.       
  21.     //输出各个数字出现的次数  
  22.     for (i = 9; i >= 0; i--)  
  23.     {  
  24.         printf("数字%d 出现%d次. ", i, arr[i]);  
  25.     }  
  26.   
  27.     //输出这些数组成的最大的数  
  28.     printf(" 组成的最大的数: ");  
  29.     for (i = 9; i >= 0; i--)  
  30.     {  
  31.         for(j = arr[i]; j > 0; j--)  
  32.             printf("%d", i);  
  33.     }  
  34.     printf(" ");  
  35.   
  36.     //输出这些数组成的最小的数,注意:0不输出  
  37.     printf(" 组成的最小的数: ");  
  38.     for (i = 1; i <= 9; i++)  
  39.     {  
  40.         for(j = arr[i]; j > 0; j--)  
  41.             printf("%d", i);  
  42.     }  
  43.     printf(" ");  
  44.   
  45.     return 0;  
  46. }  

【运行截图】

原文地址:https://www.cnblogs.com/wohenben/p/5425325.html