
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
24 Game in C++
Suppose we have four cards; these cards are holding some number from 1 to 9. We have to check whether they could operate through some operators like +, -, *, /, to get 24. So if we have some numbers like [4,9,2,6], then we can get 24 by (4 * 9) – (2 * 6), answer will be true.
To solve this, we will follow these steps −
- epsilon := 10.0^-5
- Define a function solve(), this will take an array v,
- if size of v is same as 1, then −
- return true when |v[0] - 24.0| <= epsilon
- for initialize i := 0, when i < size of v, update (increase i by 1), do −
- for initialize j := 0, when j < size of v, update (increase j by 1), do −
- if i is same as j, then: Ignore following part, skip to the next iteration
- Define an array res
- for initialize k := 0, when k < size of v, update (increase k by 1), do −
- if i is not equal to k and j is not equal to k, then −
- insert v[k] at the end of res
- if i is not equal to k and j is not equal to k, then −
- for initialize k := 0, when k < 4, update (increase k by 1), do −
- if operators[k] is same as '+', then −
- insert v[i] + v[j] at the end of res
- otherwise when operators[k] is same as '-', then −
- insert v[i] - v[j] at the end of res
- otherwise when operators[k] is same as '*', then −
- insert v[i] * v[j] at the end of res
- Otherwise
- insert v[i] / v[j] at the end of res
- if solve(res), then −
- return true
- delete last element from res
- if operators[k] is same as '+', then −
- for initialize j := 0, when j < size of v, update (increase j by 1), do −
- return false
- From the main method do following steps −
- Define an array v
- for initialize i := 0, when i < size of nums, update (increase i by 1), do −
- insert nums[i] at the end of v
- return solve(v)
Let us see the following implementation to get better understanding −
Example
#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)); }
Input
{4,9,2,6}
Output
1
Advertisements