文章
14
粉丝
80
获赞
0
访问
11.2k
#include<bits/stdc++.h>
using namespace std;
bool istrue(int a, int b, int c, int d){
int ans1=a*b*c*d;
int ans2=a*b*c+d;
int ans3=a*b+c*d;
int ans4=a*b+c+d;
int ans5=a+b+c+d;
if(ans1==24||ans2==24||ans3==24||ans4==24||ans5==24) return true;
else return false;
}
bool flag=false;
vector<int> path;//收集每一种排列
vector<int> visited(4,0);//visited[i]==0表示nums[i]没被选入path
void backtracking(vector<int>& nums){
if(path.size()==4){
if(istrue(path[0],path[1],path[2],path[3])) flag=true;//一旦找到一种组合能得出24点,就令flag=true
return;
}
for(int i=0;i<4;i++){
if(visited[i]==0){
path.push_back(nums[i]);
visited[i]=1;
}
backtracking(nums);
path.pop_back();
visited[i]=0;
}
return;
}
int main(){
vector<int> nums(4,0);
cin>>nums[0]>>nums[1]>>nums[2]>>nums[3];
backtracking(nums);
if(flag) cout<<"YES";
else cout<<"NO";
return 0;
}
登录后发布评论
括号的位置错了导致你这个递归无法终止
把括号括在下面就可以了