24 点 源代码 系列

来源:互联网 发布:xp如何禁止安装软件 编辑:程序博客网 时间:2024/06/06 00:08
【屌丝代码 001】
#include<cstdio>  #include<iostream>  #include <cmath>  using namespace std;  //+-*/   1234  unsigned long int xx[1001];  int x=1;  int pd;  int f1(int a, int b, int c, int d)  {      int sum;      pd=0;      char s1,s2,s3;      for (int j = 1; j <= 4; j++)      {          for (int k = 1; k <= 4; k++)          {              for (int l = 1; l <= 4; l++)              {                  sum = 0;                  sum += a;                  switch (j)                  {                  case 1:sum += b; break;                  case 2:sum -= b; break;                  case 3:sum *= b; break;                  case 4:                      {                          if (sum%b)                          {                              sum = 9999;                          }                          else                          {                              sum /= b;                          }                      }break;                  default:                      break;                  }                  switch (k)                  {                  case 1:sum += c; break;                  case 2:sum -= c; break;                  case 3:sum *= c; break;                  case 4:                      {                          if (sum%c)                          {                              sum = 9999;                          }                          else                          {                              sum /= c;                          }                      }break;                  default:                      break;                  }                  switch (l)                  {                  case 1:sum += d; break;                  case 2:sum -= d; break;                  case 3:sum *= d; break;                  case 4:                      {                          if (sum%d)                          {                              sum = 9999;                          }                          else                          {                              sum /= d;                          }                      }break;                  default:                      break;                  }                  switch (j)                  {                  case 1:s1='+';break;                  case 2:s1='-';break;                  case 3:s1='*';break;                  case 4:s1='/';break;                  }                  switch (k)                  {                  case 1:s2='+';break;                  case 2:s2='-';break;                  case 3:s2='*';break;                  case 4:s2='/';break;                  }                  switch (l)                  {                  case 1:s3='+';break;                  case 2:s3='-';break;                  case 3:s3='*';break;                  case 4:s3='/';break;                  }                  if (sum == 24)                  {                      if (x==0)                      {                          xx[x]=a*1000000+b*100000+c*10000+d*1000+j*100+k*10+l;                          x++;                          printf("((%d%c%d)%c%d)%c%d==24\n",a,s1,b,s2,c,s3,d);                      }                      else                      {                          for (int i=1;i<=x;i++)                          {                              if ((a*1000000+b*100000+c*10000+d*1000+j*100+k*10+l)==xx[i])                              {                                  pd=1;                                  break;                              }                          }                          if (pd==0)                          {                              xx[x]=a*1000000+b*100000+c*10000+d*1000+j*100+k*10+l;                              x++;                              printf("((%d%c%d)%c%d)%c%d==24\n",a,s1,b,s2,c,s3,d);                          }                      }                      return 1;                  }              }          }      }      return 0;  }  int f2(int a, int b, int c, int d)  {      int sum = 0;      sum = f1(a, b, c, d) + f1(a, b, d, c) + f1(a, c, b, d) + f1(a, c, d, b) + f1(a, d, b, c) + f1(a, d, c, b);      if (sum != 0)      {          return 1;      }      else      {          return 0;      }  }  int main()  {      int a, b, c, d;      int sum;      cin >> a >> b >> c >> d;      sum = f2(a, b, c, d) + f2(b, a, c, d) + f2(c, a, b, d) + f2(d, a, b, c);      if (sum == 0)      {          cout << 'N' << endl;      }      return 0;  }  



【屌丝代码 002】
<pre name="code" class="cpp">#include  <string>  #include  <cmath>  #include  <iostream> using  namespace  std;   const  double  PRECISION  =  1E-6;  const  int  COUNT_OF_NUMBER    =  4;  const  int  NUMBER_TO_BE_CAL  =  24;   double  number[COUNT_OF_NUMBER];  string  expression[COUNT_OF_NUMBER];   bool  Search(int  n)  {         if  (n  ==  1)  {                 if  (  fabs(number[0]  -  NUMBER_TO_BE_CAL)  <  PRECISION  )  {                         cout  <<  expression[0]  <<  endl;                         return  true;                 }  else  {                         return  false;                 }         }          for  (int  i  =  0;  i  <  n;  i++)  {                 for  (int  j  =  i  +  1;  j  <  n;  j++)  {                         double  a,  b;                         string  expa,  expb;                          a  =  number[i];                         b  =  number[j];                         number[j]  =  number[n  -  1];                          expa  =  expression[i];                         expb  =  expression[j];                         expression[j]  =  expression[n  -  1];                          expression[i]  =  '('  +  expa  +  '+'  +  expb  +  ')';                         number[i]  =  a  +  b;                         if  (  Search(n  -  1)  )  return  true;                                                  expression[i]  =  '('  +  expa  +  '-'  +  expb  +  ')';                         number[i]  =  a  -  b;                         if  (  Search(n  -  1)  )  return  true;                                                  expression[i]  =  '('  +  expb  +  '-'  +  expa  +  ')';                         number[i]  =  b  -  a;                         if  (  Search(n  -  1)  )  return  true;                                                                           expression[i]  =  '('  +  expa  +  '*'  +  expb  +  ')';                         number[i]  =  a  *  b;                         if  (  Search(n  -  1)  )  return  true;                          if  (b  !=  0)  {                                 expression[i]  =  '('  +  expa  +  '/'  +  expb  +  ')';                                 number[i]  =  a  /  b;                                 if  (  Search(n  -  1)  )  return  true;                         }                           if  (a  !=  0)  {                                 expression[i]  =  '('  +  expb  +  '/'  +  expa  +  ')';                                 number[i]  =  b  /  a;                                 if  (  Search(n  -  1)  )  return  true;                         }                          number[i]  =  a;                         number[j]  =  b;                         expression[i]  =  expa;                         expression[j]  =  expb;                 }         }         return  false;  }   void  main()  {         for  (int  i  =  0;  i  <  COUNT_OF_NUMBER;  i++)  {                 char  buffer[20];                 int    x;                 cin  >>  x;                 number[i]  =  x;                 itoa(x,  buffer,  10);                 expression[i]  =  buffer;         }          if  (  Search(COUNT_OF_NUMBER)  )  {                 cout  <<  "Success."  <<  endl;         }  else  {                 cout  <<  "Fail."  <<  endl;         }                  }  


                                             
0 0
原创粉丝点击