码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-04-23 19:54:21      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

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

组成最大数
 

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

输入: 自然数 n

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

 测试输入技术分享期待的输出技术分享时间限制技术分享内存限制技术分享额外进程技术分享
测试用例 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 == ‘\n‘)  
  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次.\n", i, arr[i]);  
  25.     }  
  26.   
  27.     //输出这些数组成的最大的数  
  28.     printf("\n组成的最大的数:\n");  
  29.     for (i = 9; i >= 0; i--)  
  30.     {  
  31.         for(j = arr[i]; j > 0; j--)  
  32.             printf("%d", i);  
  33.     }  
  34.     printf("\n");  
  35.   
  36.     //输出这些数组成的最小的数,注意:0不输出  
  37.     printf("\n组成的最小的数:\n");  
  38.     for (i = 1; i <= 9; i++)  
  39.     {  
  40.         for(j = arr[i]; j > 0; j--)  
  41.             printf("%d", i);  
  42.     }  
  43.     printf("\n");  
  44.   
  45.     return 0;  
  46. }  

【运行截图】

 

技术分享

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

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!