
연산자 우선 순위 무시
최댓값, 최솟값 출력
위 check 사항에 따라 연산자 우선 순위를 무시하기 위해
연산자를 선택할 때마다 계산을 해서 값을 넘겨주었다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
int MIN = 1000000000;
int MAX = -1000000000;
int N;
int num[11];
int Operator[4];
void find(int count, int value, int count_OP[]) {
if (count == N) {
if (MIN > value)
MIN = value;
if (MAX < value)
MAX = value;
return;
}
else {
int i;
for (i = 0; i < 4; i++) {
if (count_OP[i] < Operator[i]) {
if (i == 0) {
count_OP[i]++;
find(count + 1, value + num[count], count_OP);
count_OP[i]--;
}
else if (i == 1) {
count_OP[i]++;
find(count + 1, value - num[count], count_OP);
count_OP[i]--;
}
else if (i == 2) {
count_OP[i]++;
find(count + 1, value * num[count], count_OP);
count_OP[i]--;
}
else if (i == 3) {
count_OP[i]++;
find(count + 1, value / num[count], count_OP);
count_OP[i]--;
}
}
}
}
}
int main(void) {
int i;
//input
scanf("%d", &N);
for (i = 0;i < N;i++)
scanf("%d", num + i);
scanf("%d %d %d %d", Operator, Operator + 1, Operator + 2, Operator + 3);
int count_OP[4] = { 0 };
find(1, num[0], count_OP);
printf("%d\n%d\n", MAX, MIN);
}