実践:変数網羅可能な5つの値。各場合において、スタックの確立、スタックは文字の数、オペレータの一定量の代わりに取ら図面、スタックに演算の結果を表す文字列を、横断右から左へ。残りの最後には、結果の表現です。
すべての値が1の結果では、結果は、それ以外ではない、トートロジーです。
トピックはかなり激しい読んで、それは主に情報の形式が優先で、間違っているようです。
そして、この問題は、デジタルオペレータ結合配列なしで接続されています。しかしガイドライン「を、右から左に」描くことができる合理的な推論の後。
難易度:1.問題を理解して、右から左トラバーサルに、スタック2の確立を考えます。
ヒント:1値コードメモリマップ変数では、より便利に書き込みます。
情報テーブルをよく見ていることに注意してください。例えば、私は当初、Eは、排他的論理和演算であることを前提としています。
#include <cstdioを> する#include <CStringの> する#include <iostreamの> する#include <地図> の#include <積層> 使用して 名前空間STD。 チャー [ 1010 ]。 CONST チャー C [ 5 ] = { ' P '、' Q '、' R '、' S '、' T ' }。 マップ < CHAR、INT > 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ではありません" )。 } }