Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
129 views
in Technique[技术] by (71.8m points)

c++ - How many ways are there to evaluate expression to true?

given a string that includes the characters ['T','F', '|', '&', '^'], such that between every two expressions (T, F), there is an operand (|,^,&), how many ways are there to put parentheses in the expression to make it True?

I go along with the recursive approach, I did a for loop that splits the expression string at every position, meaning for the string "T|F^T", at the first level of the recursion it would make two calls with "T", "F^T" and "T|F", "T".

The base case is when the string is of length 1, the number of ways would be 1 if the expression is "T", and 0 if the expression is "F".

I'm having a hard time calculating the total ways to reach a true expression.

The code is as follows:

bool exp(string e)
{
    return e=="T";
}
bool calc(bool a, bool b, char para)
{
    bool ans;
    if(para =='|') ans= a|b;
    else if(para == '&') ans= a&&b;
    else ans= a^b;
    return ans;
}
bool cntExpr(string A, int &countsub, int &cnt)
{
   // cout<<A<<endl;
    if(A.length()==1)
        if(exp(A))
        {
            countsub=1;
            return true;
        } 
        else {
            countsub =0;
            return false;
        }
    for(int i = 1;i<A.length();i+=2) //1,3,5 ->operand positions 
    {
        string l , r;
        int leftcnt=0, rightcnt=0;
        l = A.substr(0, i);
        r = A.substr(i+1,A.length()-(i+1));
        char operand = A[i];
        bool left = cntExpr(l,leftcnt, cnt);
        bool right = cntExpr(r,rightcnt, cnt);
        countsub = leftcnt+rightcnt;
        if(calc(left, right, operand))
            cnt+=countsub;
    }
    return false;
}
question from:https://stackoverflow.com/questions/66060386/how-many-ways-are-there-to-evaluate-expression-to-true

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...