题目:输入一个正整数数组 把数组里所有数字拼接排成一个数 打印能拼接出的所有数字中最小的一个
把所有的数拼接成一个数 应当考虑到大数的情况
因此 将数字应保存成字符串的形式
假设两个数m、n.
如果mn<nm 则认为m.应当小于n
反之如果mn>nm 则认为n应当小于 m
因此对数组按照该方法进行排序
排序后按顺序拼接后输出即为最小的数字
------------------
如何证明该比较的方法是正确的 (略)
#include <iostream>
#include <string.h>
using namespace std;
const char char_max = 10;
char *ch1 = new char[char_max * 2 + 1];
char *ch2 = new char[char_max * 2 + 1];
int compare(const void *a, const void *b)
{
strcpy(ch1, *(const char **)a);
strcpy(ch1, *(const char **)b);
strcpy(ch2, *(const char **)b);
strcpy(ch2, *(const char **)a);
return strcmp(ch1, ch2);
}
void printmin(int *A, int n)
{
if (A == NULL || n <= 0)
return;
char **star = (char **)(new int[n]);
for (int i = 0;i<n;i++)
{
star[i] = new char[char_max + 1];
sprintf(star[i], "%d", A[i]);
}
qsort(star, n, sizeof(char*), compare);
for (int i = 0;i<n;i++)
cout << star[i] ;
cout << endl;
for (int i = 0;i<n;i++)
delete[]star[i];
delete [ ] star;
}
int main()
{
int n;
cin >> n;
int *A = new int[n];
for (int i = 0;i<n;i++)
cin >> A[i];
printmin(A, n);
return 0;
}