2120112|バックグラウンドトラッキング148888|C++


14888


14888:演算子の挿入
入力した演算子の個数の組み合わせに基づいて、最小値と最小値を求めて出力する問題!
再帰関数で演算し、パラメータに渡し、結果値を導出するように行います.

🎈 get関数(再帰関数)

void get(int result, int idx) {
	if (idx == N) {
		if (result > mymax)
			mymax = result;
		if (result < mymin)
			mymin = result;
		return;
	}
	for (int i = 0; i < 4; i++) {
		if (oper[i] > 0) {
			oper[i]--;
			if (i == 0)
				get(result + num[idx], idx + 1);
			else if (i == 1)
				get(result - num[idx], idx + 1);
			else if(i == 2)
				get(result * num[idx], idx + 1);
			else
				get(result / num[idx], idx + 1);
			oper[i]++;
		}
	}
	return;
}
maxとminをそれぞれ結果値と比較し、max minを設定し、演算子が保存されている配列を迂回し、演算子に基づいて結果を計算し、結果を再帰関数に渡す.最後に、oper[i]++;部の役割は、再帰関数による演算子配列の二重欠落を修正することである.idxは入力した数字を表すindexで、再帰関数を呼び出すたびに一度数字を書くので+1をして順番に計算します.
#include <iostream>
using namespace std;
int N;
int num[11];
int oper[4];
int mymin = 1000000001;
int mymax = -1000000001;
void get(int result, int idx) {
	if (idx == N) {
		if (result > mymax)
			mymax = result;
		if (result < mymin)
			mymin = result;
		return;
	}
	for (int i = 0; i < 4; i++) {
		if (oper[i] > 0) {
			oper[i]--;
			if (i == 0)
				get(result + num[idx], idx + 1);
			else if (i == 1)
				get(result - num[idx], idx + 1);
			else if(i == 2)
				get(result * num[idx], idx + 1);
			else
				get(result / num[idx], idx + 1);
			oper[i]++;
		}
	}
	return;
}

int main() {
	// + - x %
	cin >> N;
	for (int i = 0; i < N; i++)
		cin >> num[i];
	for (int i = 0; i < 4; i++)
		cin >> oper[i];
	get(num[0], 1);
	cout <<mymax << '\n';
	cout << mymin;
}
++)しかしmymaxを提出して、myminではありませんて、maxで、min、コンパイルエラーが発生しました...なぜか分からない.ううう