[原创]算24
今天看见飞燕的Flash版算24了,手痒了也想写一个,没想到这玩意儿就一纸老虎,看上去很麻烦,实际上搜索空间非常小,算起来很简单- -下面给出代码,深搜,没优化过,大家可以编译了试试看,GCC+VC9通过编译……有Bug就回帖报告吧~~~
[quote][font=新宋体][size=2]/*****************************************************************
** HighlightCodeV3.0 software by yzfy(雨中飞燕) http:// **
*****************************************************************/
#include <algorithm>
#include <iostream>
using namespace std;
int num[4],opt[4],res=24,i;
char opts[]="+-*/";
bool IsOK()
{
double sum=num[0];
for (i=0;i<3;i++)
switch (opt[i])
{
case 0:sum+=num[i+1];break;
case 1:sum-=num[i+1];break;
case 2:sum*=num[i+1];break;
case 3:if (num[i+1]==0)return false;
sum/=num[i+1];break;
}
if (sum == res)return true;
return false;
}
int main()
{
while (scanf("%d%d%d%d",num+0,num+1,num+2,num+3)!=EOF)
{
sort(num,num+4);
opt[0]=opt[1]=opt[2]=0;
while (!IsOK())
{
for (i=0;i<3 && opt[i]++>=3;i++) opt[i]=0;
if (i == 3 && !next_permutation(num,num+4))
{
puts("No Answer!");
goto next;
}
}
printf("((%d %c %d) %c %d) %c %d = %d\n",
num[0],opts[opt[color=#800000]