Итак, я написал этот код для минимизации и максимизации выражения с использованием рекурсии. Код успешно выполняется и дает максимальное значение для выражения. Однако это не дает минимального значения. Куда я иду не так. Две переменные minum
и maxum
хранят INT_MAX и INT_MIN соответственно.
Я создаю все возможности, и когда результат оказывается минимальным, чем то, что уже сохранено в минимуме, мы обновляем его.
int parenthesis(string &S, int i, int j, int &minum, int &maxum)
{
if(i>j)
return 0;
if(i==j)
return S[i]-48;
int k, rightr, leftr, res;
for(k=i+1;k<j;k+=2)
{
// evaluate the left expression
leftr = parenthesis(S, i, k-1, minum, maxum);
// evaluate the right expression
rightr = parenthesis(S, k+1, j, minum, maxum);
if(S[k]=='/')
res = leftr / rightr;
else if(S[k]=='*')
res = leftr * rightr;
else if(S[k]=='-')
res = leftr - rightr;
else
res = leftr + rightr;
// update the minum and the maxum variable
if(res>maxum)
maxum = res;
if(res<minum)
minum = res;
}
return res;
}
int main()
{
string S;
int N, i, j, k;
cin>>S;
int minum=INT_MAX, maxum=INT_MIN;
j = S.size()-1;
parenthesis(S, 0, j, minum, maxum);
cout<<minum<<" "<<maxum;
return 0;
}
`
Где я иду не так. Почему код дает правильный максимум, но не дает минимального значения. Например, для 1+2*3+4*5
ожидаемый результат равен Minimum value : 27, Maximum value : 105
, но я получаю его как Minimum value : 3, Maximum value : 105
Примечание: разрешены только однозначные вводы.
РЕДАКТИРОВАТЬ: Даже если кто-то может сказатьмне причина, почему не работает, которая будет принята как ответ