題目:給出n個正整數,如 , 求將這些數連線起來所組成的最大的數,即959957711。
變形:給出n個由0...9組成的字串(開頭可能為零),求將這些字串連線起來,所組成的最大(最小)的數。
解:排序一下,然後拼接就ok了。重點在比較函式的實現上。
方法i:
比較函式在比較兩個數時,從高位到低位迴圈比較,如**所示。
方法ii:比較函式在比較兩個數a和b時,比較其拼接後的結果,即比較ab和ba,證明可見《劍指offer》。
**(含c++11特性):
#include #include #include #include using namespace std;
string maxnumber(vector&v));
string res;
for(const string &si : v)
return res;
}int maxnumber(vector&v)
int main();
vectorv(begin(arr), end(arr));
cout << maxnumber(v) << endl;
return 0;
}
輸入乙個正整數n,輸出n 的值。
輸入乙個正整數 n nn 輸出 n n n 的值。其中n 1 2 3 nn 1 2 3 cdots n n 1 2 3 n演算法描述 n n n 可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用乙個陣列 a aa 來表示乙個大整數 a aa a 0 a 0 a 0 表示 a a...
演算法 生成和為S的N個正整數
白話經典演算法系列之十三 隨機生成和為s的n個正整數 投影法 隨機生成和為s的n個正整數有很多種解法。下面講解一種比較高效且比較有趣味性的解法 投影法。以生成和為20的4個數為例,可以先生成隨機生成0到20之間的三個數字再排序,假設得到了4,7,18。然後在x y數軸上畫出這三個數,如下圖 然後將這...
C判斷乙個正整數n的d進製數是否是回文數
所有的有關於回文數的定義和如何判斷乙個n的d進製數是否是回文數的方法都在我的 注釋當中,直接上 include int circle int n,int d brief main 判斷正整數n的d進製表示是否是回文數 return int main void printf please enter ...