題目描述:設有n個正整數,將它們聯接成一排,組成一個最小的多位整數。
程序輸入:n個數程序輸出:聯接成的多位數
例如:n=2時,2個整數32,321連接成的最小整數為:32132,n=4時,4個整數55,31,312, 33 聯接成的最小整數為:312313355
[題目要求]1. 給出偽代碼即可,請給出對應的文字說明,并使用上面給出的例子試驗你的算法。2. 給出算法的時間空間復雜度。3. 證明你的算法。(非常重要)

#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <iostream>
#include <iterator>
#include <sstream>
using namespace std;

struct Less


{
bool operator()(long i, long j)

{
static stringstream ss;
ss.clear();
ss<<i<<" "<<j;
string stri,strj;
ss>>stri>>strj;
return (i*powl(10,strj.length())+j) < (j*powl(10,stri.length()) +i);
}
};

int main()


{

long x[] =
{565, 56, 5655};
sort(x, x+3, Less());
copy(x, x+3, ostream_iterator<long>(cout));
}
證明:
假設: 排序后的 a0a1...an不是最小的,那么存在a0a1...ajai....an<a0a1...an,且ajai > aiaj.
那么交換ajai會使可以使a0a1...an更小,與假設a0a1...ajai....an<a0a1...an矛盾。
證明完畢。
posted on 2009-06-04 23:49
尹東斐 閱讀(703)
評論(2) 編輯 收藏 引用