题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。
举例:输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。
答:算法如下,证明略。
答:
#include "stdafx.h"#include#include #include using namespace std;//把int转化为stringstring 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<
运行界面如下: