Giả sử chúng ta có bốn thẻ; những thẻ này chứa một số số từ 1 đến 9. Chúng ta phải kiểm tra xem chúng có thể hoạt động thông qua một số toán tử như +, -, *, /, để có được 24. Vì vậy, nếu chúng ta có một số số như [4,9,2,6 ], thì chúng ta có thể nhận được 24 bởi (4 * 9) - (2 * 6), câu trả lời sẽ là true.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- epsilon:=10.0 ^ -5
- Xác định một hàm giải quyết (), điều này sẽ nhận một mảng v,
- nếu kích thước của v bằng 1, thì -
- trả về true khi | v [0] - 24.0 | <=epsilon
- để khởi tạo i:=0, khi tôi
- để khởi tạo j:=0, khi j
- nếu tôi giống với j, thì:Bỏ qua phần sau, chuyển sang lần lặp tiếp theo
- Xác định res một mảng
- để khởi tạo k:=0, khi k
- nếu tôi không bằng k và j không bằng k, thì -
- chèn v [k] vào cuối res
- để khởi tạo j:=0, khi j
- nếu các toán tử [k] giống với '+', thì -
- chèn v [i] + v [j] vào cuối res
- ngược lại khi các toán tử [k] giống với '-', thì -
- chèn v [i] - v [j] vào cuối res
- ngược lại, khi các toán tử [k] giống với '*', thì -
- chèn v [i] * v [j] vào cuối res
- Mặt khác
- chèn v [i] / v [j] vào cuối res
- nếu giải quyết (res), thì -
- trả về true
- xóa phần tử cuối cùng khỏi res
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#include <bits/stdc++.h> using namespace std; class Solution { public: char operators[4] = {'+', '-', '/', '*'}; double epsilon = pow(10.0, -5); bool judgePoint24(vector<int>& nums) { vector <double> v; for(int i = 0; i < nums.size(); i++){ v.push_back(nums[i]); } return solve(v); } bool solve(vector <double> v){ if(v.size() == 1){ return abs(v[0] - 24.0) <= epsilon; } for(int i = 0; i < v.size(); i++){ for(int j = 0; j < v.size(); j++){ if(i == j) continue; vector <double> res; for(int k = 0; k < v.size(); k++){ if(i != k && j != k){ res.push_back(v[k]); } } for(int k = 0; k < 4; k++){ if(operators[k] == '+'){ res.push_back(v[i] + v[j]); }else if(operators[k] == '-'){ res.push_back(v[i] - v[j]); }else if(operators[k] == '*'){ res.push_back(v[i] * v[j]); }else{ res.push_back(v[i] / v[j]); } if(solve(res)) return true; res.pop_back(); } } } return false; } }; main(){ Solution ob; vector<int> v = {4,9,2,6}; cout << (ob.judgePoint24(v)); }
Đầu vào
{4,9,2,6}
Đầu ra
1