小弟我最近碰到了一个这个来很简单的问题
任意给定4个1-10以内的整数,用加减乘除中的任意组合方式,测试4个数的运算是否能得到24。
这个问提看起来很简单,但我却完全不知道从哪入手,望各位高手指点一下

解决方案 »

  1.   

    高手不算,只能是大家共同探讨。给定4个整数之后,有3个运算符,只需要用3个循环即可:
    (例:for(int i = 0;i < 4; i++)
    可以随便设定i=0,1,2,3时
    分别为加减乘除。不过需要注意的是,由于计算机用整数作除法时,会舍去后面的
    的小数,因此,先除后乘时,必须改为先乘后除。单单作除法时,需要判断能否被
    除尽(即没有小数)。如果考虑括号的话,问题稍微复杂:括号相当于改变优先级,此时可作如下考虑:
    不论加减乘除,均只有以下5种运算顺序(数字表示操作数,^表示操作任意符号)
    ((1^2) ^3) ^4
    (( 1^ (2^3) )^4)
    ( (1^2)^(3^4) )
    (1^ (2^ (3^4) ) )
    1^ ((2^3) ^4)
      

  2.   

    http://www.linuxfans.org/nuke/modules.php?name=News&file=article&op=view&sid=711
      

  3.   

    http://expert.csdn.net/Expert/topic/1405/1405753.xml?temp=.8806269
      

  4.   

    好象有点问题://---------------------------------------------------------------------------#include <vcl.h>
    #pragma hdrstop#include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    //---------------------------------------------------------------------------
    int k=0;
    AnsiString way[4];
    //---------------------------------------------------------------------------
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void do24  (int x,int y,int w)
    {
     switch (w)
     { case 1:k=x+y; way[w]="加"; break;
     case 2:k=x-y; way[w]="减"; break;
     case 3:k=x*y; way[w]="乘"; break;
     case 4: if (x%y==x/y)
             {
      k=x/y;
      way[w]="除";
      break;
             }
        else
             {
       break;
             }
     }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int num[4];
    AnsiString e[4];
    e[1]=Edit1->Text;
    e[2]=Edit2->Text;
    e[3]=Edit3->Text;
    e[4]=Edit4->Text;
    int ie[4];
    for (int i=1;i<5;i++)
    {
     if  (e[i]=="1")
     {
     ie[i]=1;
     }
     else
         {
         if  (e[i]=="2")
           {
           ie[i]=2;
           }
           else
            if  (e[i]=="3")
               {
                 ie[i]=3;
                }
                 else            if  (e[i]=="4")
                    {
                    ie[i]=4;
                     }
                     else
                       if  (e[i]=="5")
                       {
                       ie[i]=5;
                       }
                       else                  if  (e[i]=="6")
                        {
                        ie[i]=6;
                         }
                         else
                        if  (e[i]=="7")
                               {
                                  ie[i]=7;
                               }
                               else
                              if  (e[i]=="8")
                              {
                               ie[i]=8;
                               }
                               else
                              if  (e[i]=="9")
                                 {
                                 ie[i]=9;
                                 }
                                 else
                                if  (e[i]=="10")
                                  {
                                   ie[i]=10;
                                   }
                                   else                               if  (e[i]=="11")
                                     {
                                     ie[i]=11;
                                      }
                                      else
                                         if  (e[i]=="12")
                                          {
                                              ie[i]=12;
                                              }
                                              else
                                             if  (e[i]=="13")
                                           {
                                           ie[i]=13;
                                            }
                                            else
                                            {
                                            } }num[1]=ie[1];
    num[2]=ie[2];
    num[3]=ie[3];
    num[4]=ie[4];
    for (int a=1;a<5;a++)
      {
          for (int b=1;b<5;b++)
          {
          if (b==a)
          {      }
          else
            for (int c=1;c<5;c++)
            {
            if (c==a || c==b)
            {
            }
            else
              for (int d=1;d<5;d++)
              {
              if (d==a || d==b || d==c)
              {
              }
              else
                   for (int e=1;e<5;e++)
                   {do24(num[a],num[b],e);
                     for (int f=1;f<5;f++)
                     {do24(k,num[c],f);
                      for (int g=1;g<5;g++)
                       {
                       do24(k,num[d],g);
                        AnsiString A=num[a];
                        AnsiString B=num[b];
                        AnsiString C=num[c];
                        AnsiString D=num[d];
                       if (k==24)
                       {
                       Label1->Caption=A+way[e]+B+way[f]+C+way[g]+D;
                       return;
                       }
                       else{
                       k=0;
    }
                     }
                   }
              }
            }      }
      }
    }
    }
    }//---------------------------------------------------------------------------
      

  5.   

    这个可以!!!!!!!!!//控制台
    //Build by C++ Builder 5
    //(C)2003 张叶.//---------------------------------------------------------------------------#include <vcl.h>
    #include <iostream.h>
    #pragma hdrstop
    //---------------------------------------------------------------------------
    int k=0;
    char * way[4];
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void do24  (int x,int y,int w)
    {
     switch (w)
     { case 1:k=x+y; way[w]="加"; break;
     case 2:k=x-y; way[w]="减"; break;
     case 3:k=x*y; way[w]="乘"; break;
     case 4: if (x%y==x/y)
             {
      k=x/y;
      way[w]="除";
      break;
             }
        else
             {
             k=10000;
       break;
             }
     }
    }
    //---------------------------------------------------------------------------
    #pragma argsused
    int main(int argc, char* argv[])
    {
    int num[4];
    int s[4];
    cout <<"数字1:";
    cin >> num[1];
    s[1]=num[1];
    cout <<"数字2:";
    cin >> num[2];
    s[2]=num[2];
    cout <<"数字3:";
    cin >> num[3];
    s[3]=num[3];
    cout <<"数字4:";
    cin >> num[4];
    s[4]=num[4];
    for (int e=1;e<5;e++)
                   {
                     for (int f=1;f<5;f++)
                     {
                      for (int g=1;g<5;g++)
                       {
    for (int a=1;a<5;a++)
      {
          for (int b=1;b<5;b++)
          {
          if (b==a)
          {      }
          else
            for (int c=1;c<5;c++)
            {
            if (c==a || c==b)
            {
            }
            else
              for (int d=1;d<5;d++)
              {
              if (d==a || d==b || d==c)
              {
              }
              else                   do24(num[a],num[b],e);
                       do24(k,num[c],f);
                       do24(k,num[d],g);
                       if (k==24)
                       {
                        if (num[a]==s[a]&& num[b]==s[b]&& num[c]==s[c]&& num[d]==s[d])
                        {
                       cout <<"结果是:";
                       cout <<num[a];
                       cout <<way[e];
                       cout <<num[b];
                       cout <<way[f];
                       cout <<num[c];
                       cout <<way[g];
                       cout <<num[d];
                       cout <<"\n";
                       k=0;
                        }
                         else
                         {
                         k=0;
                         }
                       }
                       else{
                       k=0;
    }
                     }
                   }
              }
            }      }
      }
    }
      

  6.   

    呵呵,谢谢了
    [email protected]