Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Thông dịch biểu thức hậu tố có biến

    Bộ thông dịch biểu thức (expression interpreter) thường làm việc trên dạng hậu tố / hậu tố Ba Lan (Reverse Polish Notation - RPN) vì không cần độ ưu tiên toán tử hay dấu ngoặc.

    Cho một biểu thức hậu tố gồm các token cách nhau bởi khoảng trắng. Mỗi token là:

    • một hằng số nguyên (có thể âm), hoặc
    • một tên biến (chuỗi chữ cái thường độ dài từ 1 đến 10), hoặc
    • một trong các toán tử hai ngôi {+,−,∗,/,%}\{+, -, *, /, \%\}{+,−,∗,/,%}, trong đó / là chia lấy phần nguyên kiểu làm tròn xuống (floor division, giống Python //) và \% là phép chia lấy dư tương ứng (giống Python %, luôn cùng dấu với mẫu số).

    Cho trước giá trị gán cho một số biến. Đề bảo đảm mọi biến xuất hiện trong biểu thức đều đã được gán giá trị. Hãy tính giá trị của biểu thức.

    Nếu trong quá trình tính, có một phép / hoặc \% mà toán hạng bên phải (mẫu số) bằng 000, chương trình coi như gặp lỗi và dừng ngay, không cần tính tiếp các phần còn lại.

    Ví dụ: biểu thức x y * 2 + với x=5,y=−3x=5, y=-3x=5,y=−3 cho kết quả 5×(−3)+2=−135 \times (-3) + 2 = -135×(−3)+2=−13.

    • Định dạng đầu vào:
      • Dòng 1: biểu thức hậu tố, các token cách nhau bởi đúng một khoảng trắng.
      • Dòng 2: số nguyên kkk (0≤k≤1000 \le k \le 1000≤k≤100) — số biến được gán giá trị.
      • kkk dòng tiếp theo, mỗi dòng gồm tên_biến giá_trị (giá trị là số nguyên, có thể âm).
    • Định dạng đầu ra:
      • Nếu có phép chia (/ hoặc \%) cho 000 trong quá trình tính: in ra DIV0.
      • Ngược lại: in ra một số nguyên duy nhất là giá trị của biểu thức.

    Ví dụ:

    Đầu vào:

    x y * 2 +
    2
    x 5
    y -3
    

    Đầu ra:

    -13
    

    Đầu vào:

    3 4 +
    0
    

    Đầu ra:

    7
    

    Đang tải editor...