题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
#include <iostream> #define rep(i,n) for(int i=0;i<n;i++) using namespace std; double a[4]={0}; string flag="false"; void dfs(double num,string use){ if(num==24){//为什么不加上条件use=="1111",题目没说清楚,但实测发现4个数字不一定要用完 flag="true"; return; } if(use=="1111"){ return; } rep(i,4){ if(use[i]=='0') { use[i]='1'; rep(j, 4){//对a[i]分别使用加减乘除 if(j==0) num+=a[i]; if(j==1) num-=a[i]; if(j==2) num*=a[i]; if(j==3) num/=a[i]; dfs(num,use); //回溯 if(j==0) num-=a[i]; if(j==1) num+=a[i]; if(j==2) num/=a[i]; if(j==3) num*=a[i]; } use[i]='0'; } } } int main() { rep(i,4){ cin>>a[i]; } string use="0000"; rep(i,4){//初始从4个数字选择一个开始dfs use[i]='1'; dfs(a[i],use); } cout<<flag; }