acm模版
排序,然後按照輸出規定輸出即可。
這裡的重點是排序準則:
如果兩個數長度一樣,則從小到大排;如果兩個數長度不一樣,則從高位開始比較,依然遵循從小到大排(比如說1、12,11、12,11、112、1122)。
重要的事說一遍,細節決定成敗!
要盡量考慮完全各種情況,尤其是當a是b字首時的情況!!!如:4177、41774,4577、45774,194、194180,……
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 1e4 + 10;
const
int maxa = 11;
struct num
num[maxn];
bool cmp(num a, num b)
int lenmin = a.len > b.len ? b.len : a.len;
// 逐位比較 從小到大排
for (int i = 0; i < lenmin; i++)
}// 0~lenmin-1為相同部分(乙個是另乙個的字首)
// 如果lenmin位小於0位,則排在前邊
// (1)、(2)是為了改變類似於4177、41774,4577、45774的順序
if (a.len > b.len)
if (lenmin == a.len) // (1)
return a.a[lenmin] < a.a[i];
}else
if (lenmin == b.len) // (2)
return !(b.a[lenmin] < b.a[i]);
}}int main(int argc, const
char * argv)
sort(num, num + n, cmp);
// 輸出(每行最多1000字元)
int flag = 0;
for (int i = 0; i < n; i++)
else}}
}cout
<< '\n';
return
0;}
51NOD 1097 拼成最小的數
1097 拼成最小的數 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 收藏關注 設有n個正整數,將它們聯接成一排,組成乙個最小的多位整數。例如 n 2時,2個整數32,321連線成的最小整數為 32132,n 4時,4個整數55,31,312,33 聯接成的最小...
51Nod 1097 拼成最小的數
1097 拼成最小的數 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 設有n個正整數,將它們聯接成一排,組成乙個最小的多位整數。例如 n 2時,2個整數32,321連線成的最小整數為 32132,n 4時,4個整數55,31,312,33 聯接成的最小整數為 3...
51Nod1097 拼成最小的數
設有n個正整數,將它們聯接成一排,組成乙個最小的多位整數。例如 n 2時,2個整數32,321連線成的最小整數為 32132,n 4時,4個整數55,31,312,33 聯接成的最小整數為 312313355 最優的情況字串a b設定num x 為字串x代表的數字,num a 10 b num b ...