本程序并不能去掉全部冗余解,只是去掉一部分,并且写的尽可能简单,仅供大家参考。(注意:直接复制本段代码是无法正常运行的,除非手动重写-,-嘿嘿)
#include <stdio.h>
#define forT for(t2=t1;t2<3;t2++)t[t2]=t[t2+1];
#define GetNum(n) {if(t1>0 && t[t1-1]==t[t1])continue;n=t[t1];forT}
#define isTrue if(23.9999<total && total<24.0001)
#define argment n1,GetSym(sym1),n2,GetSym(sym2),n3,GetSym(sym3),n4
#define pt(str) printf(str,argment);SearchCount++;continue;
#define fsym(s) for(long s=0;s<4;s++)
#define isSct(s1,s2) if(!(s1==1 && s2<=1 || s1==3 && s2>=2))
#define tct total=count
char GetSym(long symbol)
{
switch(symbol)
{
case 0: return '+';
case 1: return '-';
case 2: return '*';
default: return '/';
}
}
double count(double num1,double num2,long symbol)
{
switch(symbol)
{
case 0: if(num1>=num2)return num1+num2;else return -1e10;
case 1: if(num2!=0)return num1-num2;else return -1e10;
case 2: if(num1>=num2)return num1*num2;else return -1e10;
default:if((num2<-0.0001 || 0.0001<num2)&& num2!=1)
return num1/num2;else return -1e10;
}
}
int main(int argc, char* argv[])
{//雨中飞燕之作
long m[4],SearchCount=0,n1,n2,n3,n4;
printf("Input 4 Numbers(a,b,c,d):\n");
scanf("%d,%d,%d,%d",&m[0],&m[1],&m[2],&m[3]);
for(n2=0;n2<3;n2++)for(n1=3;n1>=n2;n1--)
if(m[n1]>m[n1+1])n3=m[n1+1],m[n1+1]=m[n1],m[n1]=n3;
for(long z1=0;z1<24;z1++)
{
long z2=z1 % 6,t1=z1/6,t2,t[4]={m[0],m[1],m[2],m[3]};
GetNum(n1)t1=z2/2;z2%=2;GetNum(n2)t1=z2;GetNum(n3)n4=t[0];
fsym(sym1)fsym(sym2)fsym(sym3)
{
double total,total2=count(n3,n4,sym3);
tct(n1,n2,sym1);tct(total,n3,sym2);tct(total,n4,sym3);
isTrue{pt("((%d%c%d)%c%d)%c%d\n")}
tct(n2,n3,sym2);tct(n1,total,sym1);tct(total,n4,sym3);
isSct(sym1,sym2)isTrue{pt("(%d%c(%d%c%d))%c%d\n")}
tct(n2,n3,sym2);tct(total,n4,sym3);tct(n1,total,sym1);
isSct(sym3,sym2)isTrue{pt("%d%c((%d%c%d)%c%d)\n")}
tct(n3,n4,sym3);tct(n2,total,sym2);tct(n1,total,sym1);
isSct(sym1,sym2)isSct(sym3,sym2)
isTrue{pt("%d%c(%d%c(%d%c%d))\n")}
tct(n1,n2,sym1);tct(total,total2,sym2);
isTrue{pt("(%d%c%d)%c(%d%c%d)\n")}
}
}
printf("Total=%d\t",SearchCount);return 0;
}
正文
简单去冗余解的24点解法2007-03-25 20:11:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/yzfy/24277.html
阅读(4233) | 评论(6)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论