编程语言:Java
题目链接:http://poj.org/problem?id=2718
题解:对所给数据进行全排列,去除开头为0的非零数,就可以进行相减的操作了
结果:AC
import java.io.*;
import java.util.Scanner;
public class Main {
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
static Scanner sc = new Scanner(System.in);
static int[] a=new int[11];
static int len,mid;
static int res;
public static void main(String[] args) throws IOException {
int n=sc.nextInt();
sc.nextLine();
while(n-->0){
String str=sc.nextLine().replaceAll(" ","");
len=str.length();
mid=len/2;
res=Integer.MAX_VALUE;
for(int i=0;i<len;i++){
a[i]=str.charAt(i)-'0';
}
dfs(0);
out.println(res);
}
out.flush();
}
private static void dfs(int start) {
if(start==len){
if((a[0]!=0&&a[mid]!=0)||(a[0]==0&&mid==1)||(a[mid]==0&&len==2)){
int ans1=0,ans2=0;
for(int i=0;i<len/2;i++){
ans1=ans1*10+a[i];
}
for(int i=len/2;i<len;i++){
ans2=ans2*10+a[i];
}
res=Math.min(res,Math.abs(ans1-ans2));
}
return;
}
for(int i=start;i<len;i++){
swap(start,i);
dfs(start+1);
swap(start,i);
}
}
private static void swap(int i, int j) {
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}