题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。
举例:输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。
答:算法如下,证明略。
答:
#include "stdafx.h" #include <iostream> #include <string> #include <sstream>using namespace std;//把int转化为string string int2str(int i) {string s;stringstream ss(s);ss << i;return ss.str(); }int cmp(const void *one,const void *two) {string strone = *(string*)one;string strtwo= *(string*)two;string stronetwo = strone + strtwo;string strtwoone = strtwo + strone;return stronetwo > strtwoone; }int _tmain(int argc, _TCHAR* argv[]) {int arr[] = {323, 324, 777, 432, 876, 565, 9, 228};int length = sizeof(arr)/sizeof(arr[0]);string *str = new string[length];for (int i = 0; i < length; i++){str[i] = int2str(arr[i]);}qsort(str, length, sizeof(str[0]), cmp);for (int i = 0; i < length; i++){cout<<str[i];}delete [] str;cout<<endl;return 0; }
运行界面如下: