Test SRM Level Two: CountExpressions, Brute Force

来源:互联网 发布:万兆mac芯片 编辑:程序博客网 时间:2024/05/29 03:32

题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=8157


这道题目跟扑克牌算24的题目比较像,但要简单一些。点击查看 next_permutation 函数 的用法,使用这个函数减轻了不少工作量,而且算法很简洁明了。


代码如下:

#include <iostream>#include <vector>#include <algorithm>using namespace std;class CountExpressions{public:int calcExpressions(int x, int y, int val);};int CountExpressions::calcExpressions(int x, int y, int val){int i, j, k;int sum, count;vector <int> vnum;if (x > y) {swap(x, y);}/* 保证 x < y */vnum.push_back(x);vnum.push_back(x);vnum.push_back(y);vnum.push_back(y);sum = 0;count = 0;do {for (i = 0; i < 3; i++) {for (j = 0; j < 3; j++) {for (k = 0; k < 3; k++) {switch (i) {case 0:sum = vnum[0] + vnum[1];break;case 1:sum = vnum[0] - vnum[1];break;case 2:sum = vnum[0] * vnum[1];break;}switch (j) {case 0:sum = sum + vnum[2];break;case 1:sum = sum - vnum[2];break;case 2:sum = sum * vnum[2];break;}switch (k) {case 0:sum = sum + vnum[3];break;case 1:sum = sum - vnum[3];break;case 2:sum = sum * vnum[3];break;}if (sum == val) {++count;}}}}} while (next_permutation(vnum.begin(), vnum.end()));/* 4个数字不同的排列组合 */return count;}