24点算法

#include     <iostream>      
  #include     <string>      
  #include     <math.h>      
     
  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()      
  {  
  char   order   =   'y';  
  while(order   ==   'y'||order   ==   'Y')  
  {  
  cout<<endl<<"Please   input   four   numbers:";  
   
  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;  
  cout<<"Are   sure   to   continue(y/n):";  
  cin>>order;            
  }  
  }       
 

starfish csdn算法版发表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值