• poj 2718 切数问题 穷竭搜索


    题意: 给一个已经排序号的数字,从中间切一刀,成两个数,要求这两个数的差最小

    思路:暴力比较差最小值

    1. stl中的next_permutation()函数进行排列  注意:这个函数必须从小到大才可以排序
    2. 把所有排序写出,从中间切,前面一个数,后面一个数,找到最小

      if (a[mid])
      {
      int x = a[0]; int y = a[mid];
      for (int i = 1; i < mid; i++)
      x = x * 10 + a[i];
      for (int i = mid + 1; i < n; i++)
      y = y * 10 + a[i];
      if (ans > abs(x - y))
      ans = abs(x - y);
      }

    解决问题的代码:

    #include <iostream>
    #include <math.h>
    #include <algorithm>
    #include <string.h>
    #include <cstdio>
    using namespace std;
    int n, a[15];
    void solve()
    {
        while (a[0] == 0) next_permutation(a, a + n);
        int ans = 1000000;
        int mid = (n + 1) / 2;
        do {
            if (a[mid])
            {
                int x = a[0]; int y = a[mid];
                for (int i = 1; i < mid; i++)
                    x = x * 10 + a[i];
                for (int i = mid + 1; i < n; i++)
                    y = y * 10 + a[i];
                if (ans > abs(x - y))
                    ans = abs(x - y);
            }
        } while (next_permutation(a, a + n));
        printf("%d
    ", ans);
        return;
    }
    int main()
    {
        int t;
        char c;
        scanf("%d", &t);
        getchar();
        while (t--)
        {
            n = 0;
            memset(a, 0, sizeof(a));
            while ((c = getchar()) != '
    ')
            {
                if (c != ' ')
                    a[n++] = c - '0';
            }
            if (n == 1) printf("%d
    ", a[0]);
            if (n == 2) printf("%d
    ", abs(a[1] - a[0]));
            else solve();
        }
        return 0;
    }
    君子知命不惧,自当日日自新
  • 相关阅读:
    SpringBoot_04springDataJPA
    SpringBoot_03mybatisPlus
    SpringBoot_02通用mapper
    SpringBoot_01
    MySQL索引背后的数据结构及算法原理
    learnVUE-note
    Java集合
    Java虚拟机的类加载机制
    设计模式中类之间的关系
    设计模式——创建型模式
  • 原文地址:https://www.cnblogs.com/xuxiaojin/p/9406495.html
Copyright © 2020-2023  润新知