Как мне хранить и сравнивать значения в булевом выражении удовлетворенности? - PullRequest
0 голосов
/ 11 ноября 2011

В подобных задачах: enter image description here

Если бы я решал задачу в C с использованием рекурсии, где мне пришлось бы находить все значения TRUE или FALSE для X1, X2 и X3, удовлетворяющие выражению, какя бы сравнил выравнивание (независимо от того, является ли переменная НЕ похожей на X2 в первом предложении) с фактическими значениями true и false?Я мог бы использовать 0 и 1 и рекурсивно попробовать все перестановки, но я не уверен, как на самом деле вычислить это.

Ответы [ 2 ]

5 голосов
/ 11 ноября 2011

Я не совсем уверен в вашем вопросе, но у вас есть 4 логических значения, которые могут быть представлены 4 битами. Используя внутреннее представление для интегралов, вы можете сделать это в цикле for, чтобы проверить все возможные комбинации:

for( int i = 0; i < 16; ++i ) // That's 2^4
{
    int x1 = i & 1;
    int x2 = i & 2;
    int x3 = i & 4;
    int x4 = i & 8;

    if( ( x1 || !x2 || !x3 ) && ( x1 || x2 || x4 ) )
        ... the expression holds for this combination, store it somewhere ...
}
1 голос
/ 11 ноября 2011

bool x1[2]={false,true};<br> bool x2[2]={false,true};<br> bool x3[2]={false,true};<br> bool x4[2]={false,true};<br> for(int i1=0;i1!=2;i1++)<br> {<br> for(int i2=0;i2!=2;i2++)<br> {<br> for(int i3=0;i3!=2;i3++)<br> {<br> for(int i4=0;i4!=2;i4++)<br> { if((x1[i1]||!x2[i2]||!x3[i3])&&(x1[i1]||x2[i2]||x4[i4]))<br> .......the expression holds, do something you need<br> }<br> }<br> }<br> }
Мысль об этом ответе та же, что и у К-Балла, но, очевидно, у него были более умные коды.

...