ブルーブリッジカップ練習問題<42問>の数え方

トピックの説明

この質問に答えるプログラムを設計してください。

皆さんご存知の通り、ポーカーには2424点という昔ながらのゲームがあり、足し算、引き算、掛け算、割り算のカードを44枚選び、2424点の答えが出せるかどうかを競います。

さて、Xiaolan は新しいゲームを発明しました。彼はポーカーから 6 枚のカードを 1 枚ずつ引きます。一度にすべてを引くわけではないことに注意してください。彼は、出力を満たすために 4242 ポイントを形成できるかどうかを計算します。逆も同様 YESです NO

最初に引かれたカードが第 1 オペランドとして使用され、引かれたカードが第 2 オペランドとして使用され、演算結果が第 1 オペランドとして使用され、演算が続行されます。

注: 無尽蔵の場合、整数は予約されており、ポーカーの 4 枚の 1010 カードが失われ、1010 は表示されません。

この質問に答えるプログラムを設計してください。

説明を入力してください

出力には 6 文字の行が 1 行だけ含まれます。

∈ 内の文字は保証されています 3 4 5 6 7 8 9 10 J Q K A 2

出力の説明

指定された文字が 42 ポイントを形成できる場合は満たされて出力され YES、そうでない場合は出力されます NO

入力サンプルと出力サンプル

入力

K A Q 6 2 3 

出力

YES

サンプル概要

  • K\times A=KK×A=K 即ち 13\times 1=1313×1=13
  • 13/12=13/12=1 予約済み整数
  • 1+6=1+6=7
  • 7*2=7*2=14
  • 14*3=14*3=42

この質問については、あらゆる可能性を直接計算する、つまり直接列挙することができます。質問には合計 5 ラウンドの操作があるため、5 つのベクター コンテナーを設定し、各ラウンドのすべての結果をコンテナーにプッシュバックし、最後に 5 番目のコンテナーを走査して、42 に等しいものがあるかどうかを確認します。 、そうであれば、yes を出力して戻ります。注意すべき点はforループのパラメータの設定です。

#include <iostream>
using namespace std;
#include <vector>

/*思路:定义一个容器数组,即总共有五个容器,分别记录从第一次运算到第五次运算的所有值,然后遍历最后那个容器,看看有没有值为42的数*/

int main()
{
  char c;
  int a[10];         //保险起见就把空间给大一点
  vector<int> ans[10];
  for(int i = 0 ; i<6 ;i++)
  {  
    cin >> c;
    if(c=='A')
    a[i]=1;
    else if(c=='J')
    a[i]=11;
    else if(c=='Q')
    a[i]=12;
    else if(c=='K')
    a[i]=13;
    else
    a[i]=(c-'0');
  }
  for(int i =0 ;i<6 ;i++)
  {
    ans[0].push_back(a[i]);
  }


  for(int i = 1; i< 6; i++ )        //外层循环是每一个抽到的牌
  {
    for(int j = 0; j< ans[i-1].size() ;j++)   //内层循环是把每一轮操作的值都给压到容器里
    {
      ans[i].push_back(ans[i-1][j]+a[i]);
      ans[i].push_back(ans[i-1][j]-a[i]);
      ans[i].push_back(ans[i-1][j]*a[i]);
      ans[i].push_back(ans[i-1][j]/a[i]);
    }
  }

  for(int i = 0 ; i< ans[5].size() ; i++)
  {
    if(ans[5][i]==42)
    {
      cout << "YES" <<endl;
      return 0;
    }
  }
  cout << "NO" <<endl;

  // 请在此输入您的代码
  return 0;
}

 

おすすめ

転載: blog.csdn.net/mc10141222/article/details/123793652