题目:算24点【递归式搜索】
题目描述
您可以使用的运算只有:+,-,,/,您还可以使用()来改变运算顺序。注意:所有的中间结果须是整数,所以一些除法运算是不允许的(例如,(22)/4是合法的,2*(2/4)是不合法的)。下面我们给出一个游戏的具体例子:
若给出的4个操作数是:1 2 3 7,则一种可能的解答是1+2+3*7=24。
本题不要求输出具体计算过程。
输入输出格式
输入格式:
只有一行,四个1到9之间的自然数。
输出格式:
如果有解的话,只要输出“yes”。如果没有解则输出“no”。
注意:不要输出引号“”。
#include<bits/stdc++.h>
using namespace std;
int num[5];
bool b[5];
void dfs(int t,int res){
// printf("%d\t%d\n",t,res);
if(t==5){
if(res==24) printf("yes"),exit(0);
return;
}
for(int i=1;i<=4;i++){
if(b[i]==1) continue;
b[i]=1;
dfs(t+1,res+num[i]);
dfs(t+1,res-num[i]);
dfs(t+1,res*num[i]);
if(res%num[i]==0) dfs(t+1,res/num[i]);
b[i]=0;
}
}
int main(){
for(int i=1;i<=4;i++) scanf("%d",&num[i]);
dfs(1,0);
printf("no\n");
}
输入7 7 8 9本应该输出no但程序输出的是yes