题目跳转:https://lx.lanqiao.cn/problem.page?gpid=T2979
代码:
第一种只有60分
#include<bits/stdc++.h>
using namespace std;
int t, Maxans;
int val[5], visited[5];
void dfs(int cnt, int result) {
if(cnt == 4) {
if(result <= 24) Maxans = max(Maxans, result);
return;
}
for(int i = 1; i <= 4; i++) {
if(!visited[i]) {
visited[i] = 1;
// 加
dfs(cnt + 1, result + val[i]);
// 减
if(result - val[i] >= 0)
dfs(cnt + 1, result - val[i]);
if(val[i] - result >= 0)
dfs(cnt + 1, val[i] - result);
// 乘
dfs(cnt + 1, result * val[i]);
// 除
if(result % val[i] == 0)
dfs(cnt + 1, result / val[i]);
if(result && val[i] % result == 0)
dfs(cnt + 1, val[i] / result);
visited[i] = 0;
}
}
}
int main() {
cin >> t;
while(t--) {
for(int i = 1; i <= 4; i++) cin >> val[i];
for(int i = 1; i <= 4; i++) {
visited[i] = 1;
dfs(1, val[i]);
visited[i] = 0;
}
cout << Maxans << '\n';
memset(visited, 0, sizeof(visited));
Maxans = 0;
}
return 0;
}
第二种100分:
#include<bits/stdc++.h>
using namespace std;
int t, Maxans;
int val[5], visited[5];
void dfs(int n) {
if(n == 1) {
if(val[n] <= 24) Maxans = max(Maxans, val[n]);
return ;
}
for(int i = 1; i <= n - 1; i++) {
for(int j = i + 1; j <= n; j++) {
int a = val[i], b = val[j];
// 加
val[j] = a + b;
val[i] = val[n];
dfs(n - 1);
// 减
val[j] = a * b;
val[i] = val[n];
dfs(n - 1);
// 乘
val[j] = abs(a - b);
val[i] = val[n];
dfs(n - 1);
// 除
if(a && b % a == 0) {
val[j] = b / a;
val[i] = val[n];
dfs(n - 1);
}
if(b && a % b == 0) {
val[j] = a / b;
val[i] = val[n];
dfs(n - 1);
}
val[i] = a;
val[j] = b;
}
}
return;
}
int main() {
cin >> t;
while(t--) {
for(int i = 1; i <= 4; i++) cin >> val[i];
dfs(4);
cout << Maxans << '\n';
Maxans = 0;
// memset(visited, 0, sizeof(visited));
}
return 0;
}