011--c數組--排序--組成最大數

數組--排序--組成最大數

組成最大數
 

任意輸入一個天然數,輸出該天然數的各位數字組成的最大數。例如,輸入 1593 ,則輸出爲 9531 。php

輸入: 天然數 n數組

輸出: 各位數字組成的最大數ide

  測試輸入關於「測試輸入」的幫助 期待的輸出關於「期待的輸出」的幫助 時間限制關於「時間限制」的幫助 內存限制關於「內存限制」的幫助 額外進程關於「{$a} 個額外進程」的幫助
測試用例 1 以文本方式顯示
  1. 1593↵
以文本方式顯示
  1. 9531↵
1秒 64M 0
【分析】

 

很顯然,這是個排序的題。先用冒泡排序實現,很簡單代碼就不寫了。post

【代碼】測試

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

 

【多說一點】.net

這裏提供一稍稍帶點技巧的實現方法,不須要排序,利用數字0~9一次遞增(排好序)的規律,直接得出結果。debug

代碼以下:component

 

[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. }  

【運行截圖】

 

相關文章
相關標籤/搜索