POJ2718-Smallest Difference

来源:互联网 发布:淘宝上在哪里买微信号 编辑:程序博客网 时间:2024/05/16 14:15

给定一组数,求由这组数中的两个数相减的最小值。

要注意的是其中的两个数不能是0开头的,即012 != 12。

对数据进行全排列,枚举所有情况取最小即可。

#include <cstdio>#include <cctype>#include <cstdlib>#include <cmath>#include <algorithm>using namespace std;const int INF = 0xfffffff;int main(){    int t;    char digit[12];    scanf("%d", &t);    getchar();        for (int i = 0; i < t; i++) {        int n = 0;        int j = 0;        while (scanf("%c", &digit[j]) == 1) {            if (isdigit(digit[j])) {                j++;            }            else if (digit[j] == '\n')                break;        }        n = j;                int ans = INF;        if (n == 2) {            ans = abs(digit[0] - digit[1]);        }        else {            int num1, num2;            do {                num1 = 0;                num2 = 0;                if (digit[0] == '0' || digit[n/2] == '0') {                    continue;                }                for (j = 0; j < n; j++) {                    if (j < n / 2) {                        num1 *= 10;                        num1 += digit[j] - '0';                    }                    else if (j < n) {                        num2 *= 10;                        num2 += digit[j] - '0';                    }                }                ans = min(ans, abs(num2-num1));            } while (next_permutation(digit, digit+n));        }                printf("%d\n", ans);    }        return 0;}


0 0
原创粉丝点击