直接深度优先搜索所有情况,全部进行计算,然后得出结果,最后有一个测试用例过不了,后面想到应该是数据的除法问题,可能因为精度丢失近似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;
}
京公网安备 11010502036488号