<span style="font-size:24px;">给4个1到10的数,然后这4个数能否经过加减乘除后得到24</span>
<span style="font-size:24px;">枚举所有组合即可</span>
<span style="font-size:24px;">首先枚举4个数字的排列,然后对于每一个排列,枚举运算符</span>
#include <iostream>
#include "OJ.h"
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
bool dfs(int nums[], int index, int sum)
{
if(index >= 4 && sum == 24)
return true;
if(index >= 4)
return false;
sum += nums[index];
if(dfs(nums, index+1, sum))
return true;
sum -= nums[index];
sum -= nums[index];
if(dfs(nums, index+1, sum))
return true;
sum += nums[index];
if(index == 0)
sum = nums[index];
else
sum *= nums[index];
if(dfs(nums, index+1, sum))
return true;
sum /= nums[index];
if(index == 0)
sum = nums[index];
else if(sum % nums[index] == 0)
{
sum /= nums[index];
if(dfs(nums, index+1, sum))
return true;
sum *= nums[index];
}
return false;
}
bool Game24Points(int a, int b, int c, int d)
{
int nums[4];
nums[0] = a;
nums[1] = b;
nums[2] = c;
nums[3] = d;
for(int index_0 = 0; index_0 < 4; index_0++)
{
for(int index_1 = 0; index_1 < 4; index_1++)
{
for(int index_2 = 0; index_2 < 4; index_2++)
{
for(int index_3 = 0; index_3 < 4; index_3++)
{
if(index_0 != index_1 && index_0 != index_2 && index_0 != index_3
&& index_1 != index_2 && index_1 != index_3
&& index_2 != index_3)
{
nums[index_0] = a;
nums[index_1] = b;
nums[index_2] = c;
nums[index_3] = d;
if(dfs(nums, 0, 0))
{
return true;
}
}
}
}
}
}
return false;
}