• 没事干写了。一个算24点的小程序


      1 //最终版
      2 #include <iostream>
      3 #include <cmath>
      4 using namespace std;
      5 double ans2(char* c)
      6 {
      7     double a,b;
      8     double sum;
      9     char t;
     10     a=c[2]-48;b=c[4]-48;
     11     t=c[3];
     12 //    cout<<"a: "<<a<<"b: "<<b<<"t: "<<t<<endl;
     13     if(t=='+')
     14        {sum=a+b;}
     15     if(t=='-')
     16         {sum=a-b;}
     17     if(t=='*')
     18         {sum=a*b;}
     19     if(t=='/')
     20         {sum=a/b;}
     21     //cout<<sum<<endl;
     22     a=sum;b=c[7]-48;
     23     t=c[6];
     24 //     cout<<"a: "<<a<<"b: "<<b<<"t: "<<t<<endl;
     25     if(t=='+')
     26        {sum=a+b;}
     27     if(t=='-')
     28         {sum=a-b;}
     29     if(t=='*')
     30         {sum=a*b;}
     31     if(t=='/')
     32         {sum=a/b;}
     33     a=sum;b=c[10]-48;
     34     t=c[9];
     35  //    cout<<"a: "<<a<<"b: "<<b<<"t: "<<t<<endl;
     36     if(t=='+')
     37        {sum=a+b;}
     38     if(t=='-')
     39         {sum=a-b;}
     40     if(t=='*')
     41         {sum=a*b;}
     42     if(t=='/')
     43         {sum=a/b;}
     44     return sum;
     45 }
     46 double ans3(char* c)
     47 {
     48     char t;
     49     double a,b;
     50     double sum1=0,sum2=0,sum=0;
     51     a=c[1]-48;  b=c[3]-48; t=c[2];
     52     if(t=='+')
     53        {sum1=a+b;}
     54     if(t=='-')
     55         {sum1=a-b;}
     56     if(t=='*')
     57         {sum1=a*b;}
     58     if(t=='/')
     59         {sum1=a/b;}
     60     a=c[7]-48; b=c[9]-48; t=c[8];
     61     if(t=='+')
     62        {sum2=a+b;}
     63     if(t=='-')
     64         {sum2=a-b;}
     65     if(t=='*')
     66         {sum2=a*b;}
     67     if(t=='/')
     68         {sum2=a/b;}
     69     a=sum1; b=sum2;  t=c[5];
     70     if(t=='+')
     71        {sum=a+b;}
     72     if(t=='-')
     73         {sum=a-b;}
     74     if(t=='*')
     75         {sum=a*b;}
     76     if(t=='/')
     77         {sum=a/b;}
     78     return sum;
     79 }
     80 double ans4(char* c)
     81 {
     82     char t;
     83     double a,b;
     84     double sum1=0,sum2=0,sum=0;
     85     a=c[4]-48;  b=c[6]-48; t=c[5];
     86     if(t=='+')
     87        {sum1=a+b;}
     88     if(t=='-')
     89         {sum1=a-b;}
     90     if(t=='*')
     91         {sum1=a*b;}
     92     if(t=='/')
     93         {sum1=a/b;}
     94     a=c[1]-48; b=sum1; t=c[2];
     95     if(t=='+')
     96        {sum2=a+b;}
     97     if(t=='-')
     98         {sum2=a-b;}
     99     if(t=='*')
    100         {sum2=a*b;}
    101     if(t=='/')
    102         {sum2=a/b;}
    103     a=sum2; b=c[10]-48;  t=c[9];
    104     if(t=='+')
    105        {sum=a+b;}
    106     if(t=='-')
    107         {sum=a-b;}
    108     if(t=='*')
    109         {sum=a*b;}
    110     if(t=='/')
    111         {sum=a/b;}
    112     return sum;
    113 }
    114 double ans5(char* c)
    115 {
    116     char t;
    117     double a,b;
    118     double sum1=0,sum2=0,sum=0;
    119     a=c[4]-48;  b=c[6]-48; t=c[5];
    120     if(t=='+')
    121        {sum1=a+b;}
    122     if(t=='-')
    123         {sum1=a-b;}
    124     if(t=='*')
    125         {sum1=a*b;}
    126     if(t=='/')
    127         {sum1=a/b;}
    128     a=sum1; b=c[9]-48; t=c[8];
    129     if(t=='+')
    130        {sum2=a+b;}
    131     if(t=='-')
    132         {sum2=a-b;}
    133     if(t=='*')
    134         {sum2=a*b;}
    135     if(t=='/')
    136         {sum2=a/b;}
    137     a=c[0]-48; b=sum2;  t=c[1];
    138     if(t=='+')
    139        {sum=a+b;}
    140     if(t=='-')
    141         {sum=a-b;}
    142     if(t=='*')
    143         {sum=a*b;}
    144     if(t=='/')
    145         {sum=a/b;}
    146     return sum;
    147 }
    148 double ans6(char* c)
    149 {
    150     char t;
    151     double a,b;
    152     double sum1=0,sum2=0,sum=0;
    153     a=c[6]-48;  b=c[8]-48; t=c[7];
    154     if(t=='+')
    155        {sum1=a+b;}
    156     if(t=='-')
    157         {sum1=a-b;}
    158     if(t=='*')
    159         {sum1=a*b;}
    160     if(t=='/')
    161         {sum1=a/b;}
    162     a=c[3]-48; b=sum1; t=c[4];
    163     if(t=='+')
    164        {sum2=a+b;}
    165     if(t=='-')
    166         {sum2=a-b;}
    167     if(t=='*')
    168         {sum2=a*b;}
    169     if(t=='/')
    170         {sum2=a/b;}
    171     a=c[0]-48; b=sum2;  t=c[1];
    172     if(t=='+')
    173        {sum=a+b;}
    174     if(t=='-')
    175         {sum=a-b;}
    176     if(t=='*')
    177         {sum=a*b;}
    178     if(t=='/')
    179         {sum=a/b;}
    180     return sum;
    181 }
    182 void fkind(char* a,int n,int i,char* t,char *p)
    183 {
    184     static int tot=0;
    185     if(i==n)
    186     {
    187         for(int j=0;j<n;j++)
    188            {
    189               // cout<<t[j]<<" ";
    190                p[tot++]=t[j];
    191            }
    192     //   cout<<endl;
    193    //  cout<<endl<<tot++<<endl;
    194     }
    195     else if(i<n)
    196     {
    197         for(int j=0;j<4;j++)
    198         {
    199             t[i]=a[j];
    200             fkind(a,n,i+1,t,p);
    201         }
    202     }
    203 }
    204 void nkind(int* a,int n,int i,int* t,int *p)
    205 {
    206     static int tot=0;
    207     if(i==n)
    208     {
    209         for(int j=0;j<n;j++)
    210            {
    211             //   cout<<t[j]<<" ";
    212                p[tot++]=t[j];
    213            }
    214     //    cout<<endl;
    215     // cout<<endl<<tot++<<endl;
    216     }
    217     else if(i<n)
    218     {
    219         for(int j=0;j<4;j++)
    220         {
    221             if(a[j]!=-1)
    222             {
    223                t[i]=a[j];
    224                int s=a[j];
    225                a[j]=-1;
    226                nkind(a,n,i+1,t,p);
    227                a[j]=s;
    228             }
    229         }
    230     }
    231 }
    232 void equation(int* a,char* b,char* c)
    233 {
    234     c[0]=c[1]='(';
    235     c[5]=c[8]=')';
    236     c[2]=a[0]+48;
    237     c[4]=a[1]+48;
    238     c[7]=a[2]+48;
    239     c[10]=a[3]+48;
    240     c[3]=b[0];
    241     c[6]=b[1];
    242     c[9]=b[2];
    243     c[11]='\0';
    244 }
    245 void equation3(int* a,char* b,char* c)
    246 {
    247     c[0]=c[6]='(';
    248     c[4]=c[10]=')';
    249     c[1]=a[0]+48;
    250     c[3]=a[1]+48;
    251     c[7]=a[2]+48;
    252     c[9]=a[3]+48;
    253     c[2]=b[0];
    254     c[5]=b[1];
    255     c[8]=b[2];
    256     c[11]='\0';
    257 }
    258 void equation4(int* a,char* b,char* c)
    259 {
    260     c[0]=c[3]='(';
    261     c[8]=c[7]=')';
    262     c[1]=a[0]+48;
    263     c[4]=a[1]+48;
    264     c[6]=a[2]+48;
    265     c[10]=a[3]+48;
    266     c[2]=b[0];
    267     c[5]=b[1];
    268     c[9]=b[2];
    269     c[11]='\0';
    270 }
    271 void equation5(int* a,char* b,char* c)
    272 {
    273     c[2]=c[3]='(';
    274     c[10]=c[7]=')';
    275     c[0]=a[0]+48;
    276     c[4]=a[1]+48;
    277     c[6]=a[2]+48;
    278     c[9]=a[3]+48;
    279     c[1]=b[0];
    280     c[5]=b[1];
    281     c[8]=b[2];
    282     c[11]='\0';
    283 }
    284 void equation6(int* a,char* b,char* c)
    285 {
    286     c[2]=c[5]='(';
    287     c[10]=c[9]=')';
    288     c[0]=a[0]+48;
    289     c[3]=a[1]+48;
    290     c[6]=a[2]+48;
    291     c[8]=a[3]+48;
    292     c[1]=b[0];
    293     c[4]=b[1];
    294     c[7]=b[2];
    295     c[11]='\0';
    296 }
    297 void actoa2(int* a,char (*p)[5],int *sig)
    298 {
    299     int i=0;
    300     for(i=0;i<4;i++)
    301     {
    302         if(sig[i]==1)
    303         {
    304             if(*(p+i)[0]=='1')  a[i]=1;
    305             if(*(p+i)[0]=='2')  a[i]=2;
    306             if(*(p+i)[0]=='3')  a[i]=3;
    307             if(*(p+i)[0]=='4')  a[i]=4;
    308             if(*(p+i)[0]=='5')  a[i]=5;
    309             if(*(p+i)[0]=='6')  a[i]=6;
    310             if(*(p+i)[0]=='7')  a[i]=7;
    311             if(*(p+i)[0]=='8')  a[i]=8;
    312             if(*(p+i)[0]=='9')  a[i]=9;
    313         }
    314         else if(sig[i]==2)
    315         {
    316            if(p[i][1]=='0'&&*(p+i)[0]=='1') {a[i]=10;  }
    317            if(p[i][1]=='1'&&*(p+i)[0]=='1') {a[i]=11;  }
    318            if(p[i][1]=='2'&&*(p+i)[0]=='1') {a[i]=12;  }
    319            if(p[i][1]=='3'&&*(p+i)[0]=='1') {a[i]=13;  }
    320         }
    321         else if(sig[i]==0)
    322         {
    323             if(*(p+i)[0]=='a'||*(p+i)[0]=='A')   a[i]=1;
    324             if(*(p+i)[0]=='j'||*(p+i)[0]=='J')   a[i]=11;
    325             if(*(p+i)[0]=='q'||*(p+i)[0]=='Q')   a[i]=12;
    326             if(*(p+i)[0]=='k'||*(p+i)[0]=='K')   a[i]=13;
    327         }
    328     }
    329 }
    330 int main()
    331 {
    332  //   char c[15];
    333     int a[4];
    334     int sig[4];
    335     char ac[4][5];
    336     int num[24][4];
    337     int tn[4];
    338     int* pn=num[0];
    339     char str[64][3];
    340     char cs[4]={'+','-','*','/'};
    341     char tc[4];
    342     char* ps=str[0];
    343     fkind(cs,3,0,tc,ps);
    344     cout<<"可以输入字母J,Q,K,A代替11,12,13,1:\n";
    345     for(int i=0;i<4;i++)
    346         {
    347             cin>>ac[i];
    348             if(ac[i][2]=='\0'&&(ac[i][1]=='1'||ac[i][1]=='2'||ac[i][1]=='3'||ac[i][1]=='0')&&ac[i][0]=='1')   sig[i]=2;
    349             else
    350             {
    351                 if(ac[i][0]>='1'&&ac[i][0]<='9'&&ac[i][1]=='\0')  sig[i]=1;
    352                 else sig[i]=0;
    353             }
    354         }
    355         actoa2(a,ac,sig);
    356     nkind(a,4,0,tn,pn);
    357     int i,j;
    358     int ok=0;
    359     int tot=0;
    360     for(i=0;i<24;i++)
    361     {
    362         for(j=0;j<64;j++)
    363         {
    364             tot++;
    365             double x=0.0;
    366             char c[15];
    367             equation(num[i],str[j],c);
    368             x=ans2(c);
    369             if(fabs(x-24.0)<=1e-5)
    370             {
    371                 ok=1;
    372                 for(int k=0;k<11;k++)
    373                 {
    374                     if(k==2||k==4||k==7||k==10)
    375                     {
    376                         if(c[k]==';')  c[k]='J';
    377                         else if(c[k]==':') c[k]='T';
    378                         else if(c[k]=='<') c[k]='Q';
    379                         else if(c[k]=='=') c[k]='K';
    380                         else if(c[k]=='1') c[k]='A';
    381                     }
    382                 }
    383                 for(int k=0;k<11;k++)
    384                     cout<<c[k];
    385                 cout<<"=24"<<endl;
    386             }
    387              if(fabs(x-4.0)<=1e-5)
    388             {
    389                 cout<<"可用阶乘:\n";
    390                 ok=2;
    391                   for(int k=0;k<11;k++)
    392                 {
    393                 if(k==2||k==4||k==7||k==10)
    394                     {
    395                         if(c[k]==';')  c[k]='J';
    396                         else if(c[k]==':') c[k]='T';
    397                         else if(c[k]=='<') c[k]='Q';
    398                         else if(c[k]=='=') c[k]='K';
    399                         else if(c[k]=='1') c[k]='A';
    400                     }
    401                 }
    402                 cout<<"(";
    403                 for(int k=0;k<11;k++)
    404                     cout<<c[k];
    405                 cout<<")!=24"<<endl;
    406             }
    407             double y=0.0;
    408             char d[15];
    409             equation3(num[i],str[j],d);
    410             y=ans3(d);
    411              if(fabs(y-24.0)<=1e-5)
    412             {
    413                 ok=1;
    414                 for(int k=0;k<11;k++)
    415                 {
    416                     if(k==1||k==3||k==7||k==9)
    417                     {
    418                         if(d[k]==';')  d[k]='J';
    419                         else if(d[k]==':') d[k]='T';
    420                         else if(d[k]=='<') d[k]='Q';
    421                         else if(d[k]=='=') d[k]='K';
    422                         else if(d[k]=='1') d[k]='A';
    423                     }
    424                 }
    425                 for(int k=0;k<11;k++)
    426                     cout<<d[k];
    427                 cout<<"=24"<<endl;
    428             }
    429              if(fabs(y-4.0)<=1e-5)
    430             {
    431                 cout<<"可用阶乘:\n";
    432                 ok=2;
    433                   for(int k=0;k<11;k++)
    434                 {
    435                    for(int k=0;k<11;k++)
    436                 {
    437                     if(k==1||k==3||k==7||k==9)
    438                     {
    439                         if(d[k]==';')  d[k]='J';
    440                         else if(d[k]==':') d[k]='T';
    441                         else if(d[k]=='<') d[k]='Q';
    442                         else if(d[k]=='=') d[k]='K';
    443                         else if(d[k]=='1') d[k]='A';
    444                     }
    445                 }
    446                 }
    447                 cout<<"(";
    448                 for(int k=0;k<11;k++)
    449                     cout<<d[k];
    450                 cout<<")!=24"<<endl;
    451             }
    452             double e1=0.0;
    453             char e[15];
    454             equation4(num[i],str[j],e);
    455             e1=ans4(e);
    456             if(fabs(e1-24.0)<=1e-5)
    457             {
    458                 ok=1;
    459                 for(int k=0;k<11;k++)
    460                 {
    461                     if(k==1||k==4||k==6||k==10)
    462                     {
    463                         if(e[k]==';')  e[k]='J';
    464                         else if(e[k]==':') e[k]='T';
    465                         else if(e[k]=='<') e[k]='Q';
    466                         else if(e[k]=='=') e[k]='K';
    467                         else if(e[k]=='1') e[k]='A';
    468                     }
    469                 }
    470                 for(int k=0;k<11;k++)
    471                     cout<<e[k];
    472                 cout<<"=24"<<endl;
    473             }
    474                if(fabs(e1-4.0)<=1e-5)
    475             {
    476                 cout<<"可用阶乘:\n";
    477                 ok=2;
    478                   for(int k=0;k<11;k++)
    479                 {
    480                    for(int k=0;k<11;k++)
    481                 {
    482                     if(k==1||k==4||k==6||k==10)
    483                     {
    484                         if(e[k]==';')  e[k]='J';
    485                         else if(e[k]==':') e[k]='T';
    486                         else if(e[k]=='<') e[k]='Q';
    487                         else if(e[k]=='=') e[k]='K';
    488                         else if(e[k]=='1') e[k]='A';
    489                     }
    490                 }
    491                 }
    492                 cout<<"(";
    493                 for(int k=0;k<11;k++)
    494                     cout<<e[k];
    495                 cout<<")!=24"<<endl;
    496             }
    497             double f1=0.0;
    498             char f[15];
    499             equation5(num[i],str[j],f);
    500             f1=ans5(f);
    501             if(fabs(f1-24.0)<=1e-5)
    502             {
    503                 ok=1;
    504                 for(int k=0;k<11;k++)
    505                 {
    506                     if(k==0||k==4||k==6||k==9)
    507                     {
    508                         if(f[k]==';')  f[k]='J';
    509                         else if(f[k]==':') f[k]='T';
    510                         else if(f[k]=='<') f[k]='Q';
    511                         else if(f[k]=='=') f[k]='K';
    512                         else if(f[k]=='1') f[k]='A';
    513                     }
    514                 }
    515                 for(int k=0;k<11;k++)
    516                     cout<<f[k];
    517                 cout<<"=24"<<endl;
    518             }
    519                    if(fabs(f1-4.0)<=1e-5)
    520             {
    521                 cout<<"可用阶乘:\n";
    522                 ok=2;
    523                   for(int k=0;k<11;k++)
    524                 {
    525                    for(int k=0;k<11;k++)
    526                 {
    527                  if(k==0||k==4||k==6||k==9)
    528                     {
    529                         if(f[k]==';')  f[k]='J';
    530                         else if(f[k]==':') f[k]='T';
    531                         else if(f[k]=='<') f[k]='Q';
    532                         else if(f[k]=='=') f[k]='K';
    533                         else if(f[k]=='1') f[k]='A';
    534                     }
    535                 }
    536                 }
    537                 cout<<"(";
    538                 for(int k=0;k<11;k++)
    539                     cout<<f[k];
    540                 cout<<")!=24"<<endl;
    541             }
    542             double g1=0.0;
    543             char g[15];
    544             equation6(num[i],str[j],g);
    545             g1=ans6(g);
    546             if(fabs(g1-24.0)<=1e-5)
    547             {
    548                 ok=1;
    549                 for(int k=0;k<11;k++)
    550                 {
    551                     if(k==0||k==3||k==6||k==8)
    552                     {
    553                         if(g[k]==';')  g[k]='J';
    554                         else if(g[k]==':') g[k]='T';
    555                         else if(g[k]=='<') g[k]='Q';
    556                         else if(g[k]=='=') g[k]='K';
    557                         else if(g[k]=='1') g[k]='A';
    558                     }
    559                 }
    560                 for(int k=0;k<11;k++)
    561                     cout<<g[k];
    562                 cout<<"=24"<<endl;
    563             }
    564              if(fabs(g1-4.0)<=1e-5)
    565                {
    566                 cout<<"可用阶乘:\n";
    567                 ok=2;
    568                   for(int k=0;k<11;k++)
    569                 {
    570                    for(int k=0;k<11;k++)
    571                 {
    572               if(k==0||k==3||k==6||k==8)
    573                     {
    574                         if(g[k]==';')  g[k]='J';
    575                         else if(g[k]==':') g[k]='T';
    576                         else if(g[k]=='<') g[k]='Q';
    577                         else if(g[k]=='=') g[k]='K';
    578                         else if(g[k]=='1') g[k]='A';
    579                     }
    580                 }
    581                 }
    582                 cout<<"(";
    583                 for(int k=0;k<11;k++)
    584                     cout<<g[k];
    585                 cout<<")!=24"<<endl;
    586             }
    587         }
    588         if(ok==1)
    589             break;
    590         if(tot==1536&&ok==0)
    591             cout<<"NO ANSWER!\n";
    592     }
    593     char ch;
    594     cout<<"按任意键结束.....";
    595     cin>>ch;
    596     return 0;
    597 }
  • 相关阅读:
    一只简单的网络爬虫(基于linux C/C++)————Url处理以及使用libevent进行DNS解析
    一只简单的网络爬虫(基于linux C/C++)————浅谈并发(IO复用)模型
    一只简单的网络爬虫(基于linux C/C++)————支持动态模块加载
    一只简单的网络爬虫(基于linux C/C++)————守护进程
    培训班出身的程序员怎么了
    【技术人成长】知识铺
    几篇QEMU/KVM代码分析文章
    用callgraph生成的两张函数调用关系图
    Qemu对x86静态内存布局的模拟
    KVM技术
  • 原文地址:https://www.cnblogs.com/CKboss/p/3014957.html
Copyright © 2020-2023  润新知