吴哲源 发表于 2024-7-18 15:04:17

24点程序

你们是不是有时候因为24点而烦恼,我今天就提供一个24点程序,只要输入四个数,就会输出算的方法。
(首先要安装DEV-C++,因为这个程序是c++代码)
想手搓代码的人我发代码,你手搓,不想的人就直接下载附件。
代码:
#include<cstdio>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int a,cnt;
char b={'*','+','-','/'};
void calc(double &a,double b,double c){
        if(c==0)a*=b;
        else if(c==1)a+=b;
        else if(c==2)a-=b;
        else if(b>0)a=a*1.0/b;
        else a=-1;
}
bool calc1(double a1,double a2,double a3,double a4,int b1,int b2,int b3,double p){
        int t1=a1,t2=a2,t3=a3,t4=a4;
        if(p==1){
                calc(a1,a2,b1);if(a1==-1)return 0;
                calc(a1,a3,b2);if(a1==-1)return 0;
                calc(a1,a4,b3);
                if(fabs(a1-24)<1e-8){
                        printf("(((%d%c%d)%c%d)%c%d)\n",t1,b,t2,b,t3,b,t4);
                        return 1;
                }
        }else if(p==3){//((A?(B?C))?D)
                calc(a2,a3,b2);if(a2==-1)return 0;
                calc(a1,a2,b1);if(a1==-1)return 0;
                calc(a1,a4,b3);
                if(fabs(a1-24)<1e-8){
                        printf("((%d%c(%d%c%d))%c%d)\n",t1,b,t2,b,t3,b,t4);
                        return 1;
                }
        }else if(p==2){//((A?B)?(C?D))
                calc(a1,a2,b1);if(a1==-1)return 0;
                calc(a3,a4,b3);if(a3==-1)return 0;
                calc(a1,a3,b2);
                if(fabs(a1-24)<1e-8){
                        printf("((%d%c%d)%c(%d%c%d))\n",t1,b,t2,b,t3,b,t4);
                        return 1;
                }
        }else if(p==4){//(A?((B?C)?D))
                calc(a2,a3,b2);if(a2==-1)return 0;
                calc(a2,a4,b3);if(a2==-1)return 0;
                calc(a1,a2,b1);
                if(fabs(a1-24)<1e-8){
                        printf("(%d%c((%d%c%d)%c%d))\n",t1,b,t2,b,t3,b,t4);
                        return 1;
                }
        }else {//(A?(B?(C?D)))
                calc(a3,a4,b3);if(a3==-1)return 0;
                calc(a2,a3,b2);if(a2==-1)return 0;
                calc(a1,a2,b1);
                if(fabs(a1-24)<1e-8){
                        printf("(%d%c(%d%c(%d%c%d)))\n",t1,b,t2,b,t3,b,t4);
                        return 1;
                }
        }return 0;
}
int main(){
        scanf("%d %d %d %d",&a,&a,&a,&a);
        int p,a1,a2,a3,a4,b1,b2,b3;
        bool mark={0};
        sort(a,a+4);
        for(p=1;p<=5;p++)
                for(a1=0;a1<4;a1++){
                        mark=1;
                        for(b1=0;b1<4;b1++)
                                for(a2=0;a2<4;a2++){
                                        if(mark)continue;
                                        mark=1;
                                        for(b2=0;b2<4;b2++)
                                                for(a3=0;a3<4;a3++){
                                                        if(mark)continue;
                                                        for(b3=0;b3<4;b3++){
                                                                if(calc1(a,a,a,a,b1,b2,b3,p))return 0;
                                                        }
                                                }mark=0;
                                }mark=0;
                }
        return 0;
}


代码满天 发表于 2024-7-18 19:38:28

想拿python的代码
页: [1]
查看完整版本: 24点程序