51Nod 1097 拼成最小的數

2021-07-16 06:38:25 字數 1288 閱讀 2858

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 ...