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、コンパイルエラーが発生しました...なぜか分からない.ううう
Reference
この問題について(2120112|バックグラウンドトラッキング148888|C++), 我々は、より多くの情報をここで見つけました
https://velog.io/@nayeon_p00/2120112-백준-백트래킹-14888-C
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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;
}
#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;
}
Reference
この問題について(2120112|バックグラウンドトラッキング148888|C++), 我々は、より多くの情報をここで見つけました https://velog.io/@nayeon_p00/2120112-백준-백트래킹-14888-Cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol