题解 | #24点游戏算法#
24点游戏算法
http://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
#include <stdio.h>
#include <math.h>
int dfs(float *num,int len){
float newnum[len-1],n;
int i,j,k,z;
if(len==1){
n=num[0]-24;
if(n<0) n*=-1;
if(n<0.0001) {
return 1;}
else return 0;
}
for(i=0;i<len;i++){
for(j=0;j<len;j++){
if(i!=j){
for(k=0;k<len;k++){
if((k!=i)&&(k!=j)) newnum[1]=num[k];
for(z=0;z<len;z++){
if((z!=i)&&(z!=j)&&(z!=k)) newnum[2]=num[z];
}
}
newnum[0]=num[i]+num[j];
if(dfs(newnum,len-1)) return 1;
newnum[0]=num[i]-num[j];
if(dfs(newnum,len-1)) return 1;
newnum[0]=num[i]*num[j];
if(dfs(newnum,len-1)) return 1;
if(num[j]!=0){
newnum[0]=num[i]/num[j];
if(dfs(newnum,len-1)) return 1;
}
}
}
}
return 0;
}
int main(void) {
float nums[4];
while(scanf("%f",nums)!=-1){
scanf("%f",nums+1);
scanf("%f",nums+2);
scanf("%f",nums+3);
if(dfs(nums,4))
printf("true\n");
else printf("false\n");
}
return 0;
}