用扑克牌计算24点
展开全部
共400多组呢!
我写了一个C语言的穷举算法:执行一遍就都出来了。
#include<stdio.h>
#include<conio.h>
#define N 13
main(){
int i,a[4],ALL=0;
int YES=0,NO=0,flag=0;
for(a[0]=1;a[0]<=N;a[0]++)
for(a[1]=a[0];a[1]<=N;a[1]++)
for(a[2]=a[1];a[2]<=N;a[2]++)
for(a[3]=a[2];a[3]<=N;a[3]++)
{ ALL++;
flag=fun(a[0],a[1],a[2],a[3]);
if(flag!=0)YES++;
else {printf("\n");
for(i=0;i<4;i++)
printf("%d,",a[i]);
NO++;}
}
printf("\n\tYES:%d\n\n\tNO:%d\n\n\tALL:%d",YES,NO,ALL);
getch();
}
int fun(int a,int b,int c,int d){
int flag=0,time=0;
int i=0,j=0,k=0,a_b,temp;
char ch[4];
while(time<6){
for(i=0;i<4;i++){
if(i<3){
if(i==0){a_b=a+b;ch[i]='+';}
if(i==1){a_b=a-b;ch[i]='-';}
if(i==2){a_b=a*b;ch[i]='*';}
{
if(a_b+c+d==24)flag++;
if(a_b+c-d==24)flag++;
if(a_b-c+d==24)flag++;
if(a_b-c+d==-24)flag++;
if(a_b-c-d==24)flag++;
if(a_b-c-d==-24)flag++;
if((a_b)+c*d==24)flag++;
if((a_b)-c*d==24)flag++;
for(j=0;j<2;j++){
if((a_b)*c+d==24)flag++;
if((a_b)*c+d==-24)flag++;
if((a_b)*c-d==24)flag++;
if((a_b)*c-d==-24)flag++;
if((a_b)*(c+d)==24)flag++;
if((a_b)*(c+d)==-24)flag++;
if((a_b)*(c-d)==24)flag++;
if((a_b)==24*(c+d))flag++;
if(a_b&&(a_b)==24*(c-d))flag++;
if((a_b)*c*d==24)flag++;
if((a_b)*c*d==-24)flag++;
if((a_b)==24*c*d)flag++;
if((a_b)*c==24*d)flag++;
if((a_b)==-24*c*d)flag++;
if((a_b)*c==-24*d)flag++;
if((a_b)+d*c==24*c)flag++;
if((a_b)-d*c==24*c)flag++;
if((a_b-c)*d==24)flag++;
if((a_b+c)*d==24)flag++;
if((a_b-c)*d==-24)flag++;
if((a_b+c)*d==-24)flag++;
if((a_b+c)==24*d)flag++;
if((a_b-c)==24*d)flag++;
if(c!=d){temp=c;c=d;d=temp;}
else break;
}
}
}
if(i==3)for(k=0;k<2;k++){a_b=a;ch[i]='/';
if(a_b+(c+d)*b==24*b)flag++;
if(a_b-(c+d)*b==-24*b)flag++;
if(a_b+(c-d)*b==24*b)flag++;
if(a_b+(c-d)*b==-24*b)flag++;
if(a_b-(c-d)*b==24*b)flag++;
if(a_b-(c-d)*b==-24*b)flag++;
for(j=0;j<2;j++){
if((a_b)*c+d*b==24*b)flag++;
if((a_b)*c-d*b==24*b)flag++;
if((a_b)*(c+d)==24*b)flag++;
if((a_b)*(c-d)==24*b)flag++;
if((a_b)+d*c*b==24*c*b)flag++;
if((a_b)+d*c*b==24*b)flag++;
if((a_b)-d*c*b==-24*b)flag++;
if((a_b-c*b)*d==24*b)flag++;
if((a_b-c*b)*d==-24*b)flag++;
if((a_b+c*b)*d==24*b)flag++;
if((a_b+c*b)==24*d*b)flag++;
if((a_b-c*b)==24*d*b)flag++;
if(a_b*c*b==24*b)flag++;
if(a_b*c==24*b*d)flag++;
if(c!=d){temp=c;c=d;d=temp;}
else break;
}temp=a;a=b;b=temp;
}
}
if(time==0){temp=b;b=c;c=temp;if(b==c)time++;}
if(time==1){temp=b;b=d;d=temp;if(b==d)time++;}
if(time==2){temp=a;a=c;c=temp;if(a==c)time++;}
if(time==3){temp=a;a=d;d=temp;if(a==d)time++;}
if(time==4){temp=b;b=d;d=temp;if(b==d)time++;}
if(time==5){temp=a;a=c;c=temp;}
time++;
}
return flag;
}
我写了一个C语言的穷举算法:执行一遍就都出来了。
#include<stdio.h>
#include<conio.h>
#define N 13
main(){
int i,a[4],ALL=0;
int YES=0,NO=0,flag=0;
for(a[0]=1;a[0]<=N;a[0]++)
for(a[1]=a[0];a[1]<=N;a[1]++)
for(a[2]=a[1];a[2]<=N;a[2]++)
for(a[3]=a[2];a[3]<=N;a[3]++)
{ ALL++;
flag=fun(a[0],a[1],a[2],a[3]);
if(flag!=0)YES++;
else {printf("\n");
for(i=0;i<4;i++)
printf("%d,",a[i]);
NO++;}
}
printf("\n\tYES:%d\n\n\tNO:%d\n\n\tALL:%d",YES,NO,ALL);
getch();
}
int fun(int a,int b,int c,int d){
int flag=0,time=0;
int i=0,j=0,k=0,a_b,temp;
char ch[4];
while(time<6){
for(i=0;i<4;i++){
if(i<3){
if(i==0){a_b=a+b;ch[i]='+';}
if(i==1){a_b=a-b;ch[i]='-';}
if(i==2){a_b=a*b;ch[i]='*';}
{
if(a_b+c+d==24)flag++;
if(a_b+c-d==24)flag++;
if(a_b-c+d==24)flag++;
if(a_b-c+d==-24)flag++;
if(a_b-c-d==24)flag++;
if(a_b-c-d==-24)flag++;
if((a_b)+c*d==24)flag++;
if((a_b)-c*d==24)flag++;
for(j=0;j<2;j++){
if((a_b)*c+d==24)flag++;
if((a_b)*c+d==-24)flag++;
if((a_b)*c-d==24)flag++;
if((a_b)*c-d==-24)flag++;
if((a_b)*(c+d)==24)flag++;
if((a_b)*(c+d)==-24)flag++;
if((a_b)*(c-d)==24)flag++;
if((a_b)==24*(c+d))flag++;
if(a_b&&(a_b)==24*(c-d))flag++;
if((a_b)*c*d==24)flag++;
if((a_b)*c*d==-24)flag++;
if((a_b)==24*c*d)flag++;
if((a_b)*c==24*d)flag++;
if((a_b)==-24*c*d)flag++;
if((a_b)*c==-24*d)flag++;
if((a_b)+d*c==24*c)flag++;
if((a_b)-d*c==24*c)flag++;
if((a_b-c)*d==24)flag++;
if((a_b+c)*d==24)flag++;
if((a_b-c)*d==-24)flag++;
if((a_b+c)*d==-24)flag++;
if((a_b+c)==24*d)flag++;
if((a_b-c)==24*d)flag++;
if(c!=d){temp=c;c=d;d=temp;}
else break;
}
}
}
if(i==3)for(k=0;k<2;k++){a_b=a;ch[i]='/';
if(a_b+(c+d)*b==24*b)flag++;
if(a_b-(c+d)*b==-24*b)flag++;
if(a_b+(c-d)*b==24*b)flag++;
if(a_b+(c-d)*b==-24*b)flag++;
if(a_b-(c-d)*b==24*b)flag++;
if(a_b-(c-d)*b==-24*b)flag++;
for(j=0;j<2;j++){
if((a_b)*c+d*b==24*b)flag++;
if((a_b)*c-d*b==24*b)flag++;
if((a_b)*(c+d)==24*b)flag++;
if((a_b)*(c-d)==24*b)flag++;
if((a_b)+d*c*b==24*c*b)flag++;
if((a_b)+d*c*b==24*b)flag++;
if((a_b)-d*c*b==-24*b)flag++;
if((a_b-c*b)*d==24*b)flag++;
if((a_b-c*b)*d==-24*b)flag++;
if((a_b+c*b)*d==24*b)flag++;
if((a_b+c*b)==24*d*b)flag++;
if((a_b-c*b)==24*d*b)flag++;
if(a_b*c*b==24*b)flag++;
if(a_b*c==24*b*d)flag++;
if(c!=d){temp=c;c=d;d=temp;}
else break;
}temp=a;a=b;b=temp;
}
}
if(time==0){temp=b;b=c;c=temp;if(b==c)time++;}
if(time==1){temp=b;b=d;d=temp;if(b==d)time++;}
if(time==2){temp=a;a=c;c=temp;if(a==c)time++;}
if(time==3){temp=a;a=d;d=temp;if(a==d)time++;}
if(time==4){temp=b;b=d;d=temp;if(b==d)time++;}
if(time==5){temp=a;a=c;c=temp;}
time++;
}
return flag;
}
2009-10-10
展开全部
5*6-2*3=24
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询