題目描述
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。
思路:
我開始時一直在想是取出每一位進行比較,發現這種不可行。後來看了網上的答案,發現正確的思路是將它們轉換成sring來進行比較。比如:3和32,轉換成string加起來就是332和323,332>323,那麼32就放在3前邊。依次兩兩進行比較,不斷交換位置。
可以看到cmp函式是個static,如果不加這個修飾符會報錯,reference to non-static member function must be called
意思就是說沒有通過類的物件來呼叫。但是正常來說乙個類中的函式是可以相互呼叫的啊。
問題的原因其實就是函式引數不匹配的問題。因為我們普通的成員函式都有乙個隱含的this指標,表面上看我們的函式cmp()只有兩個引數,但實際上它有三個引數,而我們呼叫sort()排序函式的時候只需要用到兩個引數進行比較,所以就出現了形參與實參不匹配的情況(函式有三個形參,但是只輸入了兩個實參)。
所以,解決辦法就是把謂詞函式cmp()定義為static成員函式,靜態函式就沒有this指標。
class solution
static
bool cmp(int a,int b)
};
把陣列排成最小數
題目 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。思路 簡單的思路就是先對這些資料按照我們的規則進行排序,最後從頭到尾進行拼接。這時候就可以借助仿函式進行定義排序規則,要使排成最小的數字,...
把陣列排成最小數
題目描述 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。輸入 例如輸入陣列 輸出 則列印出這三個數字能排成的最小數字為 void printminnumber int numbers,int length sort str,str length,comp...
把陣列排成最小的數
分析 這是09 年6這道題其實是希望我們能找到乙個排序規則,根據這個規則排出來的陣列能排成乙個最小的數字。要確定排序規則,就得比較兩個數字,也就是給出兩個數字m 和n,我們需要確定乙個規則m 和n哪個更大,而不是僅僅只是比較這兩個數字的數值哪個更大。根據題目的要求,兩個數字m 和n排成的數字mn 和...