我想写一个程序,输入1到10的任意四个数,要求列出经过加、减、乘、除及括号运算后,结果为24的所有解。如:
    输入:1、2、3、4
    输出:1*2*3*4=24    不知道这个算法这么写?

解决方案 »

  1.   

    这种问题,到数据算法版或C/C++版比较容易找到答案,如果你懂C++的话,自己试着改改吧。
    http://www.csdn.net/expert/topic/677/677058.xml?temp=.7747309
      

  2.   

    正在编写中。。我的算法应该说是很差的。
    for a := 1 to 3  // 第一个符号
     for b := 1 to 3  //第二个符号
      for c := 1 to 3 //第三个符号至于括号的太麻烦了。
    我正在考虑中。。
    MYEmail : [email protected]欢迎来信讨论。
      

  3.   

    把for := 1 to 3 do
    改为for := 1 to 4 do 每一个有4种可能。
      

  4.   

    c++源码:
    ------------------------------------------
    #include    <iostream  >  
    #include    <string  >  
    #include    <cmath  >  
     
    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;  
           }                  
    }  
    ------------------------------------
    我试了,连3 3 8 8 和5 5 5 1都能算。
      

  5.   

    http://expert.csdn.net/Expert/topic/1091/1091275.xml?temp=.6776544