直接深度优先搜索所有情况,全部进行计算,然后得出结果,最后有一个测试用例过不了,后面想到应该是数据的除法问题,可能因为精度丢失近似24,而int类型会认为是24,全部修改成double类型之后就能过了
#include<stdio.h> #include<string.h> double num[5],flag=0; bool vis[5]; void dfs(int step,double sum){ if(step==3){ if(sum==24){ flag=1; return ; } }else{ step++; for(int i=0;i<4;i++){ if(vis[i]==0){ vis[i]=1; dfs(step,sum+num[i]); dfs(step,sum-num[i]); dfs(step,sum*num[i]); dfs(step,sum/num[i]); vis[i]=0; } } } } int main(){ while(scanf("%lf %lf %lf %lf",&num[0],&num[1],&num[2],&num[3])!=EOF){ flag=0; memset(vis,0,sizeof(vis)); dfs(-1,0); if(flag==1){ printf("true\n"); }else{ printf("false\n"); } } return 0; }