トピックの説明
この質問に答えるプログラムを設計してください。
皆さんご存知の通り、ポーカーには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;
}