Untitled
unknown
plain_text
a year ago
1.9 kB
11
Indexable
//bieu thuc zero
#include <iostream>
using namespace std;
const int MAX_N = 9; // n tối đa là 9
char operators[MAX_N]; // lưu trữ các toán tử (+, -, ' ')
int n;
// Hàm tính giá trị của biểu thức được xây dựng từ các toán tử trong mảng operators
int evaluateExpression() {
int total = 0;
int current_num = 0;
int sign = 1; // 1 là dương (+), -1 là âm (-)
for (int i = 1; i <= n; i++) {
current_num = current_num * 10 + i; // Ghép số khi gặp ' '
// Khi gặp dấu + hoặc -, thực hiện phép tính với số hiện tại
if (i == n || operators[i] != ' ') {
total += sign * current_num;
current_num = 0; // Reset current_num
// Xác định dấu tiếp theo
if (i < n) {
if (operators[i] == '+') {
sign = 1;
} else if (operators[i] == '-') {
sign = -1;
}
}
}
}
return total;
}
// Đệ quy để thử tất cả các phép toán
void backtrack(int index) {
if (index == n) { // Nếu đã hết các vị trí thì đánh giá biểu thức
if (evaluateExpression() == 0) {
// In ra biểu thức hợp lệ
cout << "1";
for (int i = 2; i <= n; i++) {
cout << operators[i - 1] << i;
}
cout << endl;
}
return;
}
// Thử các toán tử +, -, ' ' tại vị trí hiện tại
operators[index] = ' ';
backtrack(index + 1);
operators[index] = '+';
backtrack(index + 1);
operators[index] = '-';
backtrack(index + 1);
}
int main() {
cin >> n;
// Gọi đệ quy từ vị trí 1 với biểu thức bắt đầu là 1
backtrack(1);
return 0;
}
Editor is loading...
Leave a Comment