Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

24 C++ 게임

<시간/>

4장의 카드가 있다고 가정합니다. 이 카드는 1에서 9까지의 숫자를 가지고 있습니다. 24를 얻으려면 +, -, *, /와 같은 일부 연산자를 통해 작동할 수 있는지 확인해야 합니다. 따라서 [4,9,2,6 ], 그러면 (4 * 9) – (2 * 6)에 의해 24를 얻을 수 있습니다. 답은 참이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 엡실론 :=10.0^-5
  • solve() 함수를 정의하면 배열 v가 필요합니다.
  • v의 크기가 1과 같으면 -
    • |v[0] - 24.0|인 경우 true를 반환합니다. <=엡실론
  • 초기화 i의 경우:=0, i
  • j 초기화의 경우:=0, j
  • i가 j와 같으면 다음 부분을 무시하고 다음 반복으로 건너뜁니다.
  • 배열 해상도 정의
  • 초기화 k의 경우:=0, k
  • i가 k와 같지 않고 j가 k와 같지 않으면 -
    • res 끝에 v[k] 삽입
  • 초기화 k의 경우:=0, k <4일 때 업데이트(k를 1만큼 증가), 수행 -
    • 연산자[k]가 '+'와 같으면 −
      • res 끝에 v[i] + v[j] 삽입
    • 그렇지 않으면 operator[k]가 '-'와 같을 때 −
      • res 끝에 v[i] - v[j] 삽입
    • 그렇지 않으면 operator[k]가 '*'와 같을 때 −
      • res 끝에 v[i] * v[j] 삽입
    • 그렇지 않으면
      • res 끝에 v[i] / v[j] 삽입
    • 풀면(res), 다음 -
      • 참을 반환
    • res에서 마지막 요소 삭제
  • 거짓 반환
  • 주요 방법에서 다음 단계를 수행하십시오 -
  • 배열 정의 v
  • 초기화 i의 경우:=0, i <숫자의 크기일 때 업데이트(i를 1만큼 증가), 수행 -
    • v 끝에 숫자[i] 삽입
  • 반환 풀기(v)
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    예시

    #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));
    }

    입력

    {4,9,2,6}

    출력

    1