Computer >> Máy Tính >  >> Lập trình >> C ++

24 trò chơi trong C ++

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 k:=0, khi k <4, cập nhật (tăng k lên 1), thực hiện -
    • 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
  • trả về false
  • Từ phương pháp chính, hãy thực hiện các bước sau -
  • Xác định một mảng v
  • để khởi tạo i:=0, khi tôi
  • chèn nums [i] vào cuối v
  • trả về giải quyết (v)
  • 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