# Logic# Conditional Statements# Boolean Algebra

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

🔗 前往 ZeroJudge 原題

題目描述

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

解題思路

題目要求判斷給定的 a、b 和 cc 是否滿足邏輯運算關係。程式碼透過一系列的 if 和 else if 條件判斷,分別檢查 cc 是否能由 AND, OR, XOR 運算得到。對於每種運算,程式碼會檢查 a、b 和 cc 的值是否符合該運算的真值表。如果找到一種可能的運算結果,則輸出該運算名稱,並設定一個標記 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