연산자 끼워넣기
#include <iostream>
#include <string>
#include <cstdio>
#include <stdlib.h>
#include <map>
#define TRUE 1
#define FALSE 0
using namespace std;
int visit[10];
int number[11];
int oper[10];
int maxx = -1000000000;
int minn = 1000000000;
void dfs(int num, int loop, int numberofint, int index, int now)
{
int result = 0;
if (loop == numberofint - 1)
{
if (num > maxx)
maxx = num;
if (num < minn)
minn = num;
}
else
{
for (int i = 0; i < numberofint - 1; i++)
{
if (!visit[i])
{
switch (oper[i])
{
case 1:
result = num + number[index];
break;
case 2:
result = num - number[index];
break;
case 3:
result = num * number[index];
break;
case 4:
result = num / number[index];
break;
}
visit[i] = TRUE;
dfs(result, loop + 1, numberofint, index + 1, i);
}
}
}
visit[now] = FALSE;
}
int main(void)
{
int n, op;
int idx = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> number[i];
}
for (int i = 0; i < 4; i++)
{
cin >> op;
for (int j = 0; j < op; j++)
oper[idx++] = i + 1;
}
dfs(number[0], 0, n, 1, 0);
cout << maxx << "\n";
cout << minn;
return 0;
}