【poj 3295】Tautology (栈)

実践:変数網羅可能な5つの値。各場合において、スタックの確立、スタックは文字の数、オペレータの一定量の代わりに取ら図面、スタックに演算の結果を表す文字列を、横断右から左へ残りの最後には、結果の表現です。

すべての値が1の結果では、結果は、それ以外ではない、トートロジーです。

 

トピックはかなり激しい読んで、それは主に情報の形式が優先で、間違っているようです。

そして、この問題は、デジタルオペレータ結合配列なしで接続されています。しかしガイドライン「を、右から左に」描くことができる合理的な推論の後。

難易度:1.問題を理解して、右から左トラバーサルに、スタック2の確立を考えます。

ヒント:1値コードメモリマップ変数では、より便利に書き込みます。

情報テーブルをよく見ていることに注意してください。例えば、私は当初、Eは、排他的論理和演算であることを前提としています。

 

#include <cstdioを> 
する#include <CStringの> 
する#include <iostreamの> 
する#include <地図> 
の#include <積層>
 使用して 名前空間STD。

チャー [ 1010 ]。

CONST  チャー C [ 5 ] = { ' P '' Q '' R '' S '' T ' }。
マップ < CHARINT > valの;

一方、(scanf関数(" %sの"、A)!= EOF &&(!([ 0 ] == ' 0 ' && [ 1 ] == ' \ 0 ' ))){
         int型のL =のSTRLEN(A)、 F = 1 以下のためにint型 i = 0 ; iは<(1 << 5); iは++ ){ 
            スタック < INT > STA。
            INT J = 0 ; J < 5 ; J ++)ヴァル[C [J] =(I >> j)を&;
            INT J = L - 1 ; J> = 0 ; j-- ){
                 場合(> [j]が' ' && [J] < ' Z ' 
                    sta.push(ヴァル[J] ); 他に{
                     場合([J] == ' N ' 
                        sta.top() =!sta.top();
                    {
                         INT X1 = sta.top()。
                        sta.pop(); int型 ×2 =
                
                        sta.top(); 
                        sta.pop(); 
                        スイッチ([J]){
                             ケース ' K ' :{ 
                                sta.push(X1およびX2)。
                                破ります; 
                            } 
                            ケース ' A ' :{ 
                                sta.push(X1 | X2)。
                                破ります; 
                            } 
                            ケース ' C ' :{
                                 場合(×1 == 1&& X2 == 0 
                                    sta.push(0 )。
                                
                                    sta.push(1 );
                                破ります; 
                            } 
                            ケース ' E ' :{ 
                                sta.push( ^(X1!×2));
                                破ります; 
                            } 
                        } 
                    } 
                } 
            } 
            もし(sta.top()== 0){ 
                F = 0 破ります; 
            } 
        } 
        もし、(F)
            のprintf(" トートロジーする\ n " );
        
            のprintf(" を\ nではありません" )。
    } 
}

 

おすすめ

転載: www.cnblogs.com/hs-zlq/p/11117497.html