题解:枚举全排列,按照固定的分割线分割数字,然后依次更新结果。
代码如下:
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
int u;
int num[15];
char ch;
int n,half;
scanf ("%d",&u);
int ans;
while (u--)
{
n = 0;
ans = 0x3f3f3f3f;
while (scanf ("%d%c",&num[++n],&ch) && ch != '\n');
if (n == 10)
{
cout << 247 << endl;
continue;
}
else if (n == 2)
{
cout << num[2] - num[1] << endl;
continue;
}
int a,b;
half = n >> 1;
do
{
if (num[1] == 0 || num[half+1] == 0)
continue;
int pos = 1;
a = b = 0;
for ( ; pos <= half ; pos++)
a = a*10 + num[pos];
for ( ; pos <= n ; pos++)
b = b*10 + num[pos];
ans = min(ans , abs(a-b));
// if (abs(a-b) < ans)
// {
// ans = abs(a-b);
// cout << "===" << a << ' ' << b << "===" << endl;
// }
}while (next_permutation(num+1,num+1+n));
cout << ans << endl;
}
return 0;
}