ในปัญหานี้ เราได้รับสตริง exp ที่แสดงถึงนิพจน์บูลีน งานของเราคือการประเมินนิพจน์บูลีนที่แสดงเป็นสตริง
อักขระที่ถูกต้องในนิพจน์คือ −
0 หรือ 1 หมายถึงค่าบูลีน
&หมายถึง AND การดำเนินการ
| หมายถึง OR operation
^ หมายถึงการดำเนินการ XOR
เราจำเป็นต้องแก้นิพจน์นี้และส่งคืนผลลัพธ์
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล: str =1&1|0^1^0&1
ผลลัพธ์: 0
คำอธิบาย:
1&1|0^1^0&1
1 และ 1 หรือ 0 XOR 1 XOR 0 และ 1
1 หรือ 0 XOR 1 XOR 0 และ 1
1 XOR 1 XOR 0 และ 1
0 XOR 0 และ 1
0 และ 1
0
แนวทางการแก้ปัญหา:
วิธีแก้ไขง่ายๆ คือ ตรวจสอบค่าปัจจุบันแล้วดำเนินการทีละรายการ สำหรับสิ่งนี้ เราจะพิจารณาอักขระ 3-3 ตัวของสตริงแล้วส่งคืนผลลัพธ์
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream>
using namespace std;
int andOperation(int a, int b){
return a & b;
}
int orOperation(int a, int b){
return a | b;
}
int xorOperation(int a, int b){
return a^b;
}
char solveExpression(string s) {
int n = s.length();
for (int i = 0; i < n; i += 2) {
if (s[i + 1] == '&') {
s[i + 2] = andOperation(s[i], s[i + 2]);
}
else if (s[i + 1] == '+') {
s[i + 2] = orOperation(s[i], s[i + 2]);
}
else {
s[i + 2] = xorOperation(s[i], s[i + 2]);
}
}
return s[n - 1] ;
}
int main() {
string expr = "0^1+0+1&1";
cout<<"The result of expression "<<expr<<" is "<<solveExpression(expr);
return 0;
} ผลลัพธ์ -
The result of expression 0^1+0+1&1 is 1