比赛 |
NOIP_4 |
评测结果 |
AAAWAWAAAA |
题目名称 |
算24点 |
最终得分 |
80 |
用户昵称 |
zqzas |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2008-09-19 21:42:57 |
显示代码纯文本
#include <stdio.h>
#define maxn 10
const int n=4;
const char s[4]={'+','-','*','/'};
int flag,data[maxn],num[maxn],fuhao[maxn],he[maxn],hash[maxn];
FILE *f1,*f2;
void search(int x,int now)
{
int i,j,zan;
if (now>=n-1)
{
if (x==24)
{
flag=1;
if (num[0]>num[1] || fuhao[0]==3 || fuhao[0]==1)
fprintf(f2,"%d%c%d=%d\n",num[0],s[fuhao[0]],num[1],he[0]);
else
fprintf(f2,"%d%c%d=%d\n",num[1],s[fuhao[0]],num[0],he[0]);
if (he[0]>num[2] || fuhao[1]==3 || fuhao[1]==1)
fprintf(f2,"%d%c%d=%d\n",he[0],s[fuhao[1]],num[2],he[1]);
else
fprintf(f2,"%d%c%d=%d\n",num[2],s[fuhao[1]],he[0],he[1]);
if (he[1]>num[3] || fuhao[2]==3 || fuhao[2]==1)
fprintf(f2,"%d%c%d=%d",he[1],s[fuhao[2]],num[3],he[2]);
else
fprintf(f2,"%d%c%d=%d",num[3],s[fuhao[2]],he[1],he[2]);
}
return;
}
for (i=0;i<n;i++)
{
if (hash[i]==0)
for (j=0;j<4;j++)
{
if (j!=3 || x%data[i]==0)
{
if (j==0)
zan=x+data[i];
if (j==1)
zan=x-data[i];
if (j==2)
zan=x*data[i];
if (j==3)
zan=x/data[i];
hash[i]=1;
he[now]=zan;
fuhao[now]=j;
num[now+1]=data[i];
search(zan,now+1);
hash[i]=0;
if (flag)
return;
}
}
}
}
void run(void)
{
int i;
for (i=0;i<n;i++)
{
num[0]=data[i];
hash[i]=1;
search(data[i],0);
hash[i]=0;
if (flag)
break;
}
}
void ini(void)
{
int i;
for (i=0;i<n;i++)
fscanf(f1,"%d",&data[i]);
}
int main(void)
{
f1=fopen("point24.in","r");
f2=fopen("point24.out","w");
ini();
run();
if (flag==0)
fprintf(f2,"No answer!");
fclose(f1);fclose(f2);
return 0;
}