题目描述
给出4个正整数操作数,你的任务是使用运算符(+,-,*,/)和括号对操作数进行计算,分析是否能得到24,每个操作数只能使用1次,运算符和括号可以多次使用,注意所有的中间结果都必须是整数。
输入格式
输入包括多行,每行4个正整数,范围是[1,13],输入以0 0 0 0标记结束
输出格式
若输入的4个操作数能计算出24,输出Yes,否则输出No
输入样例
1 1 1 1
2 5 7 8
0 0 0 0
输出样例
No
Yes
递归算法
#include<iostream>
using namespace std;
int a[4];
bool Fun(int n)
{
if(n==1)
return a[0]==24;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j) continue;
int a1=a[i],a2=a[j];
a[i]=a1+a2;
a[j]=a[n-1];
if(Fun(n-1)) return true;
a[i]=a1-a2;
a[j]=a[n-1];
if(Fun(n-1)) return true;
a[i]=a1*a2;
a[j]=a[n-1];
if(Fun(n-1)) return true;
if(a2!=0&&a1%a2==0)
{
a[i]=a1/a2;
a[j]=a[n-1];
if(Fun(n-1)) return true;
}
a[i]=a1;
a[j]=a2;
}
}
return false;
}
int main()
{
while(1)
{
cin>>a[0]>>a[1]>>a[2]>>a[3];
if(a[0]==0&&a[1]==0&&a[2]==0&&a[3]==0) break;
if(Fun(4))
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}