けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 079 C - Train Ticket (6Q, 灰色, 300 点)

ABC-C の最易候補! ビット全探索でもいいが、8 通りだけなので if 文の羅列でも OK。

問題概要

4 つの整数  A, B, C, D が与えられる。

 A B C D = 7

となるように、□ に + または - を入れよ。

制約

  •  0 \le A, B, C, D \le 9

考えたこと

□ は 3 個ある。それぞれに「+」と「-」の 2 通りずつの演算子の入れ方があるので、計算式として考えられるものは

 2^{3} = 8 通り

ある。これらをすべて試して、7 になるものを探せば良い。具体的な式については、下のコードを参照。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    string ABCD;
    cin >> ABCD;
    int A = ABCD[0] - '0', B = ABCD[1] - '0', C = ABCD[2] - '0', D = ABCD[3] - '0';

    string operators = "";
    if (A + B + C + D == 7) operators = "+++";
    else if (A + B + C - D == 7) operators = "++-";
    else if (A + B - C + D == 7) operators = "+-+";
    else if (A + B - C - D == 7) operators = "+--";
    else if (A - B + C + D == 7) operators = "-++";
    else if (A - B + C - D == 7) operators = "-+-";
    else if (A - B - C + D == 7) operators = "--+";
    else if (A - B - C - D == 7) operators = "---";

    cout << A << operators[0] << B << operators[1] << C << operators[2] << D << "=7" << endl;
}