POJ2718Smallest Difference(暴力全排列)

传送门

题目大意:升序输入十进制数 没有重复 分成两个非空集合 每个集合组成一个数(不能有前导零) 

求两个数差的最小值。

题解:全排列...我数组从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;
}
 
原文地址:https://www.cnblogs.com/zzyh/p/11657208.html