题意:给你一组数据 ,要你组成两组不同的数,差值最小。
思路:尽可能让两组数位数相同,然后暴力求解
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define INF 0x3f3f3f3f
#define maxn 20
using namespace std;
int a[maxn];
int n;
void operation()
{
while(a[0] == 0)
next_permutation(a,a + n);//保证第一个不是0
int ans = INF;
int half = (n + 1) / 2;
do
{
if(a[half])//挑选中间元素 保证不是 0
{
int begin = a[0];
int then = a[half];
for(int i = 1; i < half; i ++)
begin = begin * 10 + a[i];
for(int j = half + 1; j < n; j ++)
then = then * 10 + a[j];
if(ans > abs(begin - then))
ans = abs(begin - then);
}
}while(next_permutation(a,a + n));
printf("%d\n",ans);
}
int main()
{
int T;
char c;
scanf("%d",&T);
getchar();
while(T -- )
{
n = 0;
while( (c = getchar()) != '\n')
{
if(c != ' ')
a[n++] = c - '0';
}
if(n == 2)
printf("%d\n",abs(a[1] - a[0]));
else operation();
}
return 0;
}