私はKattisからプログラミングの問題をいくつかやっています。私が立ち往生している問題4 thoughtの一部があります。プログラムは操作を返すことになっている数、与えられ逐次計算中に操作の順序を維持する
(+、 - 、*または/)はその数を達成するために、4四つんばい間に必要。
例えば、入力
9
は出力に
4 + 4 + 4/4 = 9
をもたらすであろう私のソリューションは、(効率的な、しかし、簡単ではありません)上記の演算子を組み合わせて、見るためにすべての可能な方法を評価することです所望の結果を達成する組み合わせがあれば、私は以下の見た機能を書かれているこれを行うには
。それが評価される演算子である文字の配列(uo[3]
、{+, /, *}
ようになり)、および整数(expRes
)として所望の結果を取り込みます。
bool check(char uo[3], int expRes) {
int res = 4;
for(int oPos = 2; oPos >= 0; oPos--) {
switch (uo[oPos]) {
case '+' : res += 4; break;
case '-' : res -= 4; break;
case '*' : res *= 4; break;
case '/' : res /= 4; break;
}
}
return res == expRes;
}
この「シーケンシャル」アプローチには、操作の順序に従わないという問題があります。 uo = {+, -, /}
と expRes = 7
で関数を呼び出す場合は、4 + 4 = 8,8-4 = 4,4/4 = 1なのでfalseを返します。 実際の答えは4 + 4 - = 7
4月4日には、あなたのいずれかが評価の操作の順序を次のように機能を書き換えるための方法を考えることはできますか?
ありがとうございます!