# Logic# Conditional Statements# Boolean Algebra

c461 - apcs 邏輯運算子 (Logic Operators)

🔗 前往 ZeroJudge 原題

題目描述

題目給定兩個非負整數 ab,以及一個邏輯運算的結果 cc (0 或 1)。要求判斷 cc 是否能由 ab 透過 AND, OR, XOR 運算得到,並按照 AND, OR, XOR 的順序輸出所有可能的運算結果。如果沒有任何運算結果能得到 cc,則輸出 "IMPOSSIBLE"。

解題思路

題目要求判斷給定的 abcc 是否滿足邏輯運算關係。程式碼透過一系列的 ifelse if 條件判斷,分別檢查 cc 是否能由 AND, OR, XOR 運算得到。對於每種運算,程式碼會檢查 abcc 的值是否符合該運算的真值表。如果找到一種可能的運算結果,則輸出該運算名稱,並設定一個標記 im 為 1,表示已經找到了一種可能的結果。如果所有運算都檢查完畢,且 im 仍然為 0,則輸出 "IMPOSSIBLE"。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int main(){
	int a,b,cc;
	while(cin >> a >> b >> cc){
		bool aa=a,bb=b,im=0;
		if(bb==cc&&aa==cc){
			cout << "AND\n";
			im=1;
		}
		else if(aa!=bb&&cc==0){
			cout << "AND\n";
			im=1;
		}
		if(aa==1||bb==1){
			if(cc==1){
				cout << "OR\n";
				im=1;
			}
		}
		else if(aa==0&&bb==0){
			if(cc==0){
				cout << "OR\n";
				im=1;
			}
		}
		if(aa!=bb){
			if(cc==1){
				cout << "XOR\n";
				im=1;
			}
		}
		else{
			if(cc==0){
				cout << "XOR\n";
				im=1;
			}
		}
		if(im==0){
			cout << "IMPOSSIBLE\n";
		}
	}
}

Discussion