给定一组数,求由这组数中的两个数相减的最小值。
要注意的是其中的两个数不能是0开头的,即012 != 12。
对数据进行全排列,枚举所有情况取最小即可。
#include <cstdio>
#include <cctype>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
const int INF = 0xfffffff;
int main()
{
int t;
char digit[12];
scanf("%d", &t);
getchar();
for (int i = 0; i < t; i++) {
int n = 0;
int j = 0;
while (scanf("%c", &digit[j]) == 1) {
if (isdigit(digit[j])) {
j++;
}
else if (digit[j] == '\n')
break;
}
n = j;
int ans = INF;
if (n == 2) {
ans = abs(digit[0] - digit[1]);
}
else {
int num1, num2;
do {
num1 = 0;
num2 = 0;
if (digit[0] == '0' || digit[n/2] == '0') {
continue;
}
for (j = 0; j < n; j++) {
if (j < n / 2) {
num1 *= 10;
num1 += digit[j] - '0';
}
else if (j < n) {
num2 *= 10;
num2 += digit[j] - '0';
}
}
ans = min(ans, abs(num2-num1));
} while (next_permutation(digit, digit+n));
}
printf("%d\n", ans);
}
return 0;
}