
discreteMathProblems
Bình là một tân sinh viên mộng mơ về suất học bổng của trường đại học. Thế nhưng, Bình lại bị hành sấp mặt bởi bộ môn toán rời rạc. Bình phải làm các bài tập xác định xem một biểu thức logic là hằng đúng hay hằng sai. Các bạn hãy giúp Bình giải quyết chúng nhé:
Đề bài : Cho một chuỗi string clause đại điện cho một biểu thức logic(chỉ chứa 3 toán tử ^, v, !(and, or, not) và 3 biến mệnh đề p,q,t cùng với các dấu đóng mở ngoặc ()). Hãy xác định chuỗi string trên là hằng đúng hoặc hằng sai h,ay không phải hằng đúng/sai.
Ví dụ :
clause = "!(p^q)v(pvqvt)"
là hằng đúng, nêndiscreteMathProblems(clause)=1
. Vì dù các biến mệnh đề p,q,t mang giá trị nào đi chăng nữa, biểu thứcclause
luôn mang giá trị đúng, ta có bảng chân trị như sau:
p | q | t | !(p^q)v(pvqvt) |
1 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
0 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 |
0 | 0 | 0 | 1 |
clause = "pvqvt"
không là hằng đúng cũng không là hằng sai, nêndiscreteMathProblems(clause)=0.
Vì biểu thức này có chân trị đúng hoặc sai tùy thuộc vào giá trị của các biến mệnh đề, ta có bảng chân trị như sau:
p | q | t | pvqvt |
1 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
0 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 |
0 | 0 | 0 | 0 |
Quy ước :
- ^(94), v(118), !(33) lần lượt là toán tử and, or và not với mã ascii như trong ngoặc. Dấu đóng mở ngoặc () thể hiện thứ tự ưu tiên
- Hằng đúng là biểu thức luôn có chân trị là đúng với mọi giá trị của biến và ngược lại.
- Bài toán chỉ yêu cầu với biểu thức gồm 3 biến mệnh đề p, q và t.
- Ta có giá trị khi thực hiện các toán tử như sau:
A | B | A or B | not A | A and B |
1 | 1 | 1 | 0 | 1 |
0 | 1 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
Đầu vào/ra:
- [Giới hạn thời gian] 0.5s với C++, 3s với Java & C#, 4s Python, GO và Js.
- [Đầu vào] string clause.
- [Đầu ra] int . 1 nếu là hằng đúng, -1 nếu là hằng sai, 0 nếu không phải hằng đúng cũng không phải hằng sai.
Post Comment