给定一个数组 A,假设{5, 5, 4, 3, 7}
,使用操作{*, /, + -}
并5, 5, 4, 3
得到结果为7
。如果可能,请打印答案。如果不是,return 0
.
Answer : 5 * 5 - 4 / 3 = 7
.
我使用递归、蛮力、检查所有案例解决了这个问题。
我的代码:
void check_result(int* arr, int size, char* op, int depth, int result, int val)
{
if(depth==size)
{
if(val==result)
{
// call function to print pattern of op[]
}
return ;
}
else
{
op[depth]='+';
check_result( arr+1, size, op, depth+1, result, val + *arr );
op[depth]='-';
check_result( arr+1, size, op, depth+1, result, val - *arr );
op[depth]='*';
check_result( arr+1, size, op, depth+1, result, val * (*arr) );
op[depth]='/';
if( *arr )
check_result( arr+1, size, op, depth+1, result, val / (*arr) );
}
}
你能告诉我这个问题的动态方法吗,因为这需要O(4^n)
时间。