POJ2718Smallest Difference(暴力全排列)

傳送門ios

題目大意:升序輸入十進制數 沒有重複 分紅兩個非空集合 每一個集合組成一個數(不能有前導零) 數組

求兩個數差的最小值。學習

題解:全排列...我數組從1開始怎麼一直WA...還有這個輸入值得學習。spa

代碼:code

#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())!='\n') {
            if(s==' ') continue;
            a[js++]=s-'0';
        }
        int mid;
        mid=js/2;
        if(js==1) {
            printf("%d\n",a[0]);
            //    return 0;************
            continue;
        }
        if(js==2) {
            printf("%d\n",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\n",ans);

    }
    return 0;}
相關文章
相關標籤/搜索