Cho bốn biến a, b, c, d với các giá trị được xác định trước sẽ in ra dấu ngoặc vuông đã cho tùy thuộc vào biến được sử dụng.
Biến ở đâu,
a for (( b for () c for )( d for ))
Nhiệm vụ là sử dụng tất cả các dấu ngoặc đã cho và in biểu thức dấu ngoặc cân bằng, nếu chúng ta không thể tạo biểu thức dấu ngoặc cân bằng thì in -1. Trong trường hợp có nhiều câu trả lời, chúng tôi có thể in ra bất kỳ câu trả lời nào trong số nhiều câu trả lời có thể được hình thành bằng cách sử dụng dấu ngoặc cho sẵn.
Ví dụ
Input: a = 3, b = 2, c = 4, d = 3 Output : (((((()()()()())))))()()
Để đạt được kết quả này, trước tiên chúng ta có thể kiểm tra xem biểu thức dấu ngoặc cân bằng có thể được hình thành với số lượng dấu ngoặc cho trước hay không. Nếu biểu thức có thể được tạo bởi số lượng dấu ngoặc cho trước thì chúng ta sẽ làm như vậy.
- In số lượng dấu ngoặc nhọn loại 1.
- In số lượng dấu ngoặc nhọn loại 3.
- In số lượng dấu ngoặc nhọn loại 4.
- In số lượng dấu ngoặc nhọn loại 2.
Dưới đây là thuật toán và cách triển khai phương pháp này.
Thuật toán
START Step 1 -> Declare Function void print(int a, int b, int c, int d) Declare int i IF ((a == d && a) || (a == 0 && c == 0 && d == 0)) Loop For i=1 and i<=a and i++ Print (( End Loop For i=1 and i<=c and i++ Print )( End Loop For i=1 and i<=d and i++ Print )) End Loop For i=1 and i<=b and i++ Print () End Else Print can’t be formed Step 2 -> main() Declare int a = 3, b = 2, c = 4, d = 3 Call print(a,b,c,d) STOP
Ví dụ
#include<stdio.h> void print(int a, int b, int c, int d){ int i; if ((a == d && a) || (a == 0 && c == 0 && d == 0)){ for (i = 1; i <= a; i++) printf("(("); for (i = 1; i <= c; i++) printf(")("); for (i = 1; i <= d; i++) printf("))"); for (i = 1; i <= b; i++) printf("()"); } else printf("can't be formed"); } int main(){ int a = 3, b = 2, c = 4, d = 3; print(a, b, c, d); return 0; }
Đầu ra
nếu chúng ta chạy chương trình trên thì nó sẽ tạo ra kết quả sau
(((((()()()()())))))()()