#include double sum(double a,double b) { return a+b; } double mi(double a,double b) { return a-b; } double mul(doub">
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
10年前发布

C语言版的算24游戏代码

给定4个1-9之间的数,通过加减乘除四则运算算出24来,可以使用括号

#include "stdafx.h"  #include <stdio.h>  #include <stdlib.h>     double sum(double a,double b)  {      return a+b;  }  double mi(double a,double b)  {      return a-b;  }  double mul(double a,double b)  {      return a*b;  }  double di(double a,double b)  {      return a/b;  }     double (*ops[4])(double a,double b)={sum,mi,mul,di};     double num[4];/*输入的数*/  double num3[4];/*第二次运算时暂时保存*/  double num4[4];/*第一次运算时暂时保存*/  double numf[4];/*输入的数保存输出时候用*/     /*复制数组*/  void copyarr(double *src,double *des)  {      int i;      double t[4];      for(i=0;i<4;i++)          des[i]=src[i];  }     /*第一次计算后,合并为前三个数*/  void reorder4(int cp4,double re4)  {      switch(cp4)      {      case 0:          num[0]=re4;          num[1]=num[2];          num[2]=num[3];          break;      case 1:          num[1]=re4;          num[2]=num[3];          break;      case 2:          num[2]=re4;          break;         }  }     /*第二次计算后,合并为两个数*/  void reorder3(int cp3,double re3)  {      switch(cp3)      {      case 0:          num[0]=re3;          num[1]=num[2];          break;      case 1:          num[1]=re3;          break;         }  }     /*根据运算得到操作符*/  char opc(double(*opt)(double a,double b))  {      if(opt==sum)          return '+';      else if(opt==mi)          return '-';      else if(opt==mul)          return '*';      else if(opt==di)          return '/';     }     /*输出*/  void printresult(double *num,int ta3,int ta4,double(*op2)(double a,double b),double(*op3)(double a,double b),double(*op4)(double a,double b))  {      double n0=num[0];      double n1=num[1];      double n2=num[2];      double n3=num[3];         switch(ta4)      {      case 0:          if(ta3==0)              printf("((%.0f%c%.0f)%c%.0f)%c%.0f\n",n0,opc(op4),n1,opc(op3),n2,opc(op2),n3);          else if(ta3==1)              printf("(%.0f%c%.0f)%c(%.0f%c%.0f)\n",n0,opc(op4),n1,opc(op2),n2,opc(op3),n3);          break;      case 1:          if(ta3==0)              printf("(%.0f%c(%.0f%c%.0f))%c%.0f\n",n0,opc(op3),n1,opc(op4),n2,opc(op2),n3);          else if(ta3==1)              printf("%.0f%c((%.0f%c%.0f)%c%.0f)\n",n0,opc(op2),n1,opc(op4),n2,opc(op3),n3);          break;      case 2:          if(ta3==0)              printf("(%.0f%c%.0f)%c(%.0f%c%.0f)\n",n0,opc(op3),n1,opc(op2),n2,opc(op4),n3);          else if(ta3==1)              printf("%.0f%c(%.0f%c(%.0f%c%.0f))\n",n0,opc(op2),n1,opc(op3),n2,opc(op4),n3);          break;      }  }     int main(void)  {      int a,b,c,d;/*输入的数*/      int cp3,cp4;/*cp3,cp4分别是第二次和第一次运算时的两个数运算,前一个数所在的位置*/      int i,j,k;/*循环各种运算*/      double re2,re3,re4;/*第3,2,1次运算的结果*/      double(*cop2)(double a,double b);/*第3次操作符*/      double(*cop3)(double a,double b);/*第2次操作符*/      double(*cop4)(double a,double b);/*第1次操作符*/         scanf("%d%d%d%d",&a,&b,&c,&d);         num[0]=(double)a;      num[1]=(double)b;      num[2]=(double)c;      num[3]=(double)d;         /*每次运算之前备份,运算后合并以供后面的运算,但是如果没有找到解必须恢复备份*/      copyarr(num,numf);      copyarr(num,num4);         for(cp4=0;cp4<=2;cp4++)      {          for(i=0;i<4;i++)          {              cop4=ops[i];              re4=(*cop4)(num[cp4],num[cp4+1]);              reorder4(cp4,re4);              copyarr(num,num3);              for(cp3=0;cp3<=1;cp3++)              {                  for(j=0;j<4;j++)                  {                      cop3=ops[j];                      re3=(*cop3)(num[cp3],num[cp3+1]);                      reorder3(cp3,re3);                         for(k=0;k<4;k++)                      {                          cop2=ops[k];                          re2=(*cop2)(num[0],num[1]);                          if(re2==24)                          {                              printresult(numf,cp3,cp4,cop2,cop3,cop4);                              system("pause");                              return 0;                          }                      }                      copyarr(num3,num);                  }              }              copyarr(num4,num);          }      }         system("pause");      return 0;  }