科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件算24点程序:面向过程与面向对象的C++ (2)

算24点程序:面向过程与面向对象的C++ (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

算24点程序:面向过程与面向对象的C++ (2)

作者:ben 来源:51vb 2007年11月11日

关键字: C++ 面向对象 面向过程 Linux

  • 评论
  • 分享微博
  • 分享邮件

3、面向过程的C实现

  这是 csdn 算法论坛前版主海星的代码,程序非常简练、精致:

#include    
#include   
#include   

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; 
       }                 

  使用任一个 c++ 编译器编译即可。

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章