题目大意:升序输入十进制数 没有重复 分成两个非空集合 每个集合组成一个数(不能有前导零)
求两个数差的最小值。
题解:全排列...我数组从1开始怎么一直WA...还有这个输入值得学习。
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define INF 100000000 using namespace std; int T; int js,ans; int a[21]; int mul(int x,int y) { int sum=0; for(int i=x; i<=y; i++) { sum=sum*10+a[i]; } return sum; } int main() { scanf("%d",&T); getchar(); while(T--) { int s; ans=INF; js=0; while((s=getchar())!=' ') { if(s==' ') continue; a[js++]=s-'0'; } int mid; mid=js/2; if(js==1) { printf("%d ",a[0]); // return 0;************ continue; } if(js==2) { printf("%d ",a[1]-a[0]); continue; // return 0; } while(a[0]==0) next_permutation(a,a+js); do { if(a[mid]==0) continue; int tmp1=0,tmp2=0; tmp1=mul(0,mid-1); tmp2=mul(mid,js-1); ans=min(ans,abs(tmp1-tmp2)); } while(next_permutation(a,a+js)); printf("%d ",ans); } return 0;
}