設有n個正整數(n≤20),將它們聯接成一排,組成乙個最大的多位整數。
例如:n=3時,3個整數13,312,343聯接成的最大整數為:34331213
又如:n=4時,4個整數7,13,4,246聯接成的最大整數為:7424613
第一行,乙個正整數n。
第二行,n個正整數。
乙個正整數,表示最大的整數
輸入 #1複製
313 312 343
輸出 #1複製
34331213
題目標籤上寫著「字串」和「排序」
妙啊,一眼把這題秒了
那我們怎麼來對字串進行排序呢?
(我還以為這題挺簡單來著
通過資訊科技查閱資料(看題解)我才知道
string型別中對字串也定義了兩個運算子
《的定義為按字典序比較,
+的定義為字串直接連線
那現在假設我們有了兩個字串a=131,b=232;
那我們考慮a+b和b+a之間的區別
因為此時string型別中的+表示的是鏈結
則a+b=131232
b+a=232131
很明顯有b+a>a+b
那我們考慮過載cmp然後用sort排字串
bool cmp(conststring &a,const
string &b)
這就有了乙個字串比較函式那我們怎麼證明這個結論一定完全正確呢?
請讀者自證(大霧
那好吧我們來分類討論一下
首先是兩者不一樣長的情況
我們首先要判斷兩者的最高位
最高位大者在前
如果兩者長度相同
則還是先比較最大的位數
只要字典序大的則放在前面
於是過載乙個string型別的cmp並用sort
於是就很爽,就很爽
#include#includeusing
namespace
std;
const
int maxn=25
;int
n;string
in[maxn];
bool cmp(const
string &a,const
string &b)
intmain()
//4073213221713513
洛谷 P1012 拼數
大約有兩種方法 來處理 用字串來比較兩數字 solution 1 p1012 拼數 include include include include include define maxn 21 using namespace std int n,i string s maxn bool cmp st...
洛谷P1012 拼數
有n個正整數 n 20 將它們聯接成一排,組成乙個最大的多位整數。例如 n 3時,3個整數13,312,343聯接成的最大整數為 34331213 又如 n 4時,44個整數7,13,4,246聯接成的最大整數為 7424613 輸入輸出格式 輸入格式 第一行,乙個正整數n。第二行,n個正整數。輸出...
洛谷P1012(拼數)
設有 n 個正整數 a1 an a 1 dots a n a1 an 將它們聯接成一排,相鄰數字首尾相接,組成乙個最大的整數 第一行有乙個整數,表示數字個數 n。第二行有 n 個整數,表示給出的 n 個整數 a ia i ai 乙個正整數,表示最大的整數 對於這一題,我剛開始還是想老老實實用int或...