http://poj.org/problem?id=2718
给出最多10个数字,划分为两个整数,求差值最小的值(除非只有一位数,否则不允许出现先导0)
若有n个数,必然有一个整数长n/2,另一个长n-n/2。利用next_permutation()函数枚举数字的每个排列
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int t;
string s;
int a[11];
int main(){
cin >> t;
getchar();
while (t--){
getline(cin,s);
int num=0;
int ans=0x3f3f3f;
for (int i=0;i<s.length();i++){
if (s[i]>='0'&&s[i]<='9'){
a[num++]=s[i]-'0';
}
}
sort(a,a+num);
while (next_permutation(a,a+num)){
int x=0,y=0;
if (a[0]==0 || a[num/2]==0&&num>2) continue;
for (int i=0;i<num/2;i++){
x=x*10+a[i];
}
for (int i=num/2;i<num;i++){
y=y*10+a[i];
}
ans=min(ans,abs(x-y));
}
cout << ans << endl;
}
}