配列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)
。