查詢 C++ 中使用給定數字可形成的最大數
假設我們有一個數字陣列。我們必須找到使用該陣列的所有數字可以獲得的最大數。因此,如果該陣列類似於 [3, 3, 9, 6, 2, 5],則最大數可以是 965332。
根據這個問題,我們可以看到我們很容易按非遞減順序對數字進行排序,然後打印出來。但是,我們可以使用更有效的方法來解決這個問題。我們可以建立一個大小為 10 的陣列來儲存每個數字的頻率,然後相應地從 9 到 0 列印數字。
示例
#include <iostream>
#include <string>
using namespace std;
int maxNumFromNum(int arr[], int n) {
int freq[10] = {0};
for (int i=0; i<n; i++)
freq[arr[i]]++;
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 digits[] = {3, 3, 9, 6, 2, 5};
int n = sizeof(digits)/sizeof(digits[0]);
cout << "Maximum number: " << maxNumFromNum(digits, n);
}輸出
Maximum number: 965332
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
JavaScript
PHP