首页 > 其他 > 详细

编程之美 24点

时间:2014-04-11 10:49:54      阅读:420      评论:0      收藏:0      [点我收藏+]

Use sets to keep unique and Binary Form 1111 to the possible results.  The code is :

#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
class Solution {
 public:
  set<double> status[16];
  typedef set<double>::iterator ITER;
  void f(int x, vector<int>& vec) {
    for (int i = 1; i <= x / 2; ++i) {
      if ((x & i) == i) {
        for (ITER j = status[i].begin(); j != status[i].end(); ++j)
          for (ITER k = status[x-i].begin(); k != status[x-i].end(); ++k) {
            status[x].insert((*j) * (*k));
            status[x].insert((*j) + (*k));
            status[x].insert((*j) - (*k));
            status[x].insert((*k) - (*j));
            if ((*k) != 0)
              status[x].insert((*j) / (*k));
            if ((*j) != 0)
              status[x].insert((*k) / (*j));
          }
      } 
    }
  }
  void init(const vector<int>& vec) {
    for (int i = 0; i < vec.size(); ++i)
      status[(1 << i)].insert((double)vec[i]);
  }
  bool getSum24(vector<int>& vec) {
    init(vec); 
    for (int i = 1; i <= 15; ++i)
      f(i, vec);
    return status[15].find(24) != status[15].end() ? true : false;
  }
};


int main() {
  int a[] = {1, 1, 1, 1};
  Solution s;
  vector<int> vec(a, a+4);
  bool res = s.getSum24(vec);

  return 0;
}


编程之美 24点,布布扣,bubuko.com

编程之美 24点

原文:http://blog.csdn.net/taoqick/article/details/23393487

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!