c461 - apcs 邏輯運算子 (Logic Operators)
題目描述
題目給定兩個非負整數 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";
}
}
}