この問題は、1125っていう入力が与えられたら、足し算引き算の演算子を入れて、
1-1+2+5=7
みたいに出力するっていうものです。
1-1+2+5=7
みたいに出力するっていうものです。
つまり、+か-かを全パターン試して当てはまるものを出力すれば良いのです。
(僕のコードは恥ずかしいものです)
なので2^3=8通りしかないです。
だから、For文を使うとだいぶ見えづらくなります。
For文を使わない公式の回答の方がだいぶ良いです。
(僕のコードは恥ずかしいものです)
なので2^3=8通りしかないです。
だから、For文を使うとだいぶ見えづらくなります。
For文を使わない公式の回答の方がだいぶ良いです。
ポイント
・最初の数字の正負は弄らなくて良いので最初の数字だけ自動的に出力して良い。
・0115のように最初に数字があるものが入力されることがあるので、整数入力ではなく文字列の入力をしなくてはいけない
・For文を使わない方が良い(使う場合、以下のダメなコードのように既存の入力の残しておいたり、変更した符号をもとに戻したり、フラグを用意したりしないといけないため。)
以下、コードです。
#include <iostream>#include <stdio.h>#include <string>#include <algorithm>#include <functional>#include <vector> // std::vectorusing namespace std;int main(void){int num, sum = 0, i, j, k, a[4], b[4], flag = 0;string str, sign = "+++";cin >> str;num = atoi(str.c_str());b[0] = a[0] = (num % 10); num /= 10;b[1] = a[1] = (num % 10); num /= 10;b[2] = a[2] = (num % 10); num /= 10;b[3] = a[3] = (num % 10); num /= 10;for (i=0; i<2; i++) {for (j=0; j<2; j++) {for (k=0; k<2; k++) {sign = "+++";if(i == 0){sign[0] = '+';}else if(i == 1){sign[0] = '-';}if(j == 0){sign[1] = '+';}else if(j == 1){sign[1] = '-';}if(k == 0){sign[2] = '+';}else if(k == 1){sign[2] = '-';}b[0] = a[0];b[1] = a[1];b[2] = a[2];if(sign[0] == '-'){b[2] = -1*a[2];}if(sign[1] == '-'){b[1] = -1*a[1];}if(sign[2] == '-'){b[0] = -1*a[0];}sum = 0;sum = b[0] + b[1] + b[2] + b[3];if(sum == 7){flag = 1;break;}}if(flag == 1){break;}}if(flag == 1){break;}}cout << str[0] << sign[0] << str[1] << sign[1] << str[2] << sign[2] << str[3] <<"=7" << endl;}