找出在 C++ 中使用給定數字的位數形成的最大數字


假設我們有一個數字包含 n 位。我們需要找到使用所有數字位形成的最大數字。因此,如果數字為 339625,則最大數字可以是 965332。

從題意中,我們可以看到可以輕鬆地按非遞增順序對數字進行排序,然後列印它們。但是,我們可以使用更有效的方式解決此問題。我們可以建立一個大小為 10 的陣列來儲存每個數字出現的頻率,然後依次列印從 9 到 0 的數字。

例項

 即時演示

#include <iostream>
#include <string>
using namespace std;
int maxNumFromNum(int num) {
   int freq[10] = {0};
   string str = to_string(num);
   for (int i=0; i<str.length(); i++)
   freq[str[i]-'0']++;
   int res = 0, mul = 1;
   for (int i = 0; i <= 9; i++) {
      while (freq[i] > 0) {
         res = res + (i * mul);
         freq[i]--;
         mul = mul * 10;
      }
   }
   return res;
}
int main() {
   int num = 339625;
   cout << "Maximum number: " << maxNumFromNum(num);
}

輸出

Maximum number: 965332

更新於: 2019-12-18

460 瀏覽次數

開啟你的職業

完成課程後獲得認證

開始
廣告