0
已解决
栾峻岩
初级天翼
初级天翼
#include <iostream>
using namespace std;
bool dfs(int a[],int num)
{
if (num==1)
{
if (a[1]==24) return true;
else return false;
}
else
{
int na[5];
bool used[5]={0};
for (int i=1;i<=num;i++)
{
int x,y;
x=a[i];
used[i]=true;
for (int j=1;j<=num;j++)
{
int cnt=1;
if (!used[j])
{
y=a[j];
used[j]=true;
for (int k=1;k<=num;k++)
{
if (!used[k])
{
na[++cnt]=a[k];
}
}
na[1]=x+y;
if (dfs(na,num-1)) return true;
na[1]=x-y;
if (dfs(na,num-1)) return true;
na[1]=x*y;
if (dfs(na,num-1)) return true;
if (y!=0 && x%y==0)
{
na[1]=x/y;
if (dfs(na,num-1)) true;
}
used[j]=false;
}
}
used[i]=false;
}
}
return false;
}
int main()
{
int a[5];
for (int i=1;i<=4;i++)
{
cin>>a[i];
}
if (dfs(a,4)) cout<<"Yes\n";
else cout<<"No\n";
return 0;
}
只得了90分,求大佬,巨佬求助。
测试点#8错了。(不是超时,是WA)
题目网址:point here
题目:
几十年前全世界就流行一种数字游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”。您作为游戏者将得到4个1~9之间的自然数作为操作数,而您的任务是对这4个操作数进行适当的算术运算,要求运算结果等于24。
您可以使用的运算只有:+,-,,/,您还可以使用()来改变运算顺序。注意:所有的中间结果须是整数,所以一些除法运算是不允许的(例如,(22)/4是合法的,2*(2/4)是不合法的)。下面我们给出一个游戏的具体例子:
若给出的4个操作数是:1、2、3、7,则一种可能的解答是1+2+3*7=24。
输入描述 Input Description
只有一行,四个1到9之间的自然数。
输出描述 Output Description
如果有解的话,输出"Yes";没有解输出"No"
样例输入 Sample Input
1 2 3 7
样例输出 Sample Output
Yes
@陆麟瑞 @葛新 @杨喆 @贾文卓 @Every Dalao
栾峻岩在2018-09-17 12:20:12追加了内容
@杨喆 @酷町喵~o( =∩ω∩= )o~ @贾敬波 @葛新 @陆麟瑞 @沈吴敏 @许正全 @陆姗姗 @贾文卓 @贾子昂 @刘斐 @樊澄宇
求助,为什么九十分,请各位大佬找找问题。
1
0
0
0
0
0
0