赛迪网 > IT技术 C/C++ > 文章
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

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

发布时间:2006.03.20 14:05     来源:51vb    作者:ben

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++ 编译器编译即可。

<<上一页 1 2 3 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管