比赛 |
20100914 |
评测结果 |
AAAWAWAAWA |
题目名称 |
算24点 |
最终得分 |
70 |
用户昵称 |
苏轼 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2010-09-14 20:29:26 |
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
const char way[4]={'+','-','*','/'};
int a[4][4];
int me[4],me2[4];
void out()
{
int t1,t2;
t1=max(a[0][me2[0]],a[0][me2[0]+1]),t2=min(a[0][me2[0]],a[0][me2[0]+1]);
printf("%d%c%d=%d\n",t1,way[me[0]],t2,a[1][me2[0]]);
t1=max(a[1][me2[1]],a[1][me2[1]+1]),t2=min(a[1][me2[1]],a[1][me2[1]+1]);
printf("%d%c%d=%d\n",t1,way[me[1]],t2,a[2][me2[1]]);
t1=max(a[2][me2[2]],a[2][me2[2]+1]),t2=min(a[2][me2[2]],a[2][me2[2]+1]);
printf("%d%c%d=%d\n",t1,way[me[2]],t2,a[3][me2[2]]);
exit(0);
}
void search(int dep)
{
for(int i=0;i<=3-dep;i++)
if (!a[dep][i])
return ;
if (dep==3)
{
if (a[dep][0]==24)
out();
return ;
}
for(int i=0;i<3-dep;i++)
{
me2[dep]=i;
for(int j=0;j<i;j++)
a[dep+1][j]=a[dep][j];
for(int j=i+1;j<=i+2-dep;j++)
a[dep+1][j]=a[dep][j+1];
a[dep+1][i]=a[dep][i]+a[dep][i+1];me[dep]=0;
search(dep+1);
if (a[dep][i]-a[dep][i+1]>0)
{
a[dep+1][i]=a[dep][i]-a[dep][i+1];me[dep]=1;
search(dep+1);
}
a[dep+1][i]=a[dep][i]*a[dep][i+1];me[dep]=2;
search(dep+1);
if (a[dep][i+1]&&a[dep][i]%a[dep][i+1]==0)
{
a[dep+1][i]=a[dep][i]/a[dep][i+1];me[dep]=3;
search(dep+1);
}
}
}
int main()
{
freopen("point24.in","r",stdin);
freopen("point24.out","w",stdout);
scanf("%d%d%d%d",a[0],a[0]+1,a[0]+2,a[0]+3);
search(0);
printf("No answer!\n");
return 0;
}