回 帖 发 新 帖 刷新版面

主题:24点问题

不知道你玩过24点吗?就是任意给你4个数字,你用+,-,*,/运算符去得到24。
  有兴趣的试试看呢,我是没思考出来,高手来指教!

回复列表 (共17个回复)

沙发

/***在TC2.0下运行****/

#include<conio.h>
#include<math.h>
#include<conio.h>
main()
{
  int x[4],y[3];
  float num[4],r=0;
  int i;
  char sig[4]={'+','-','*','/'};

  clrscr();
  printf("Please input 4 integers:");
  for(i=0;i<4;i++)
     scanf("%f",&num[i]);

  for(x[0]=0;x[0]<4;x[0]++)
     for(x[1]=0;x[1]<4;x[1]++)
     {
        if(x[1]==x[0])continue;
        for(x[2]=0;x[2]<4;x[2]++)
        {
           if(x[2]==x[1]||x[2]==x[0])continue;
           for(x[3]=0;x[3]<4;x[3]++)
           {
               if(x[3]==x[0]||x[3]==x[1]||x[3]==x[2])continue;


               for(y[0]=0;y[0]<4;y[0]++)
               for(y[1]=0;y[1]<4;y[1]++)
               for(y[2]=0;y[2]<4;y[2]++)
               {
                   r=num[x[0]];
                   for(i=1;i<4;i++)
                   {
                       switch(y[i-1])
                       {
                        case 0:r=(float)(r+num[x[i]]);break;
                        case 1:r=(float)(r-num[x[i]]);break;
                        case 2:r=(float)(r*num[x[i]]);break;
                        case 3:r=(float)(r/num[x[i]]);break;
                        default:break;
               }
           }
           if(fabs(r-24.0)<0.001)
           {
             printf("\n [(%d%c%d)%c%d]%c%d=24",(int)num[x[0]],sig[y[0]],(int)num[x[1]],sig[y[1]],(int)num[x[2]],sig[y[2]],(int)num[x[3]]);

             goto end;
           }

               }
           }
        }
     }
  printf("No answer!");
  end:
     getch();
}

板凳

1楼的能给出详细的流程图或算法吗

看不懂吖

3 楼

呵呵!不好噢!
5 5 5 1 是 No answer!
想知道answer是什么吗? (5-1/5)*5 = 24

(^_^)

4 楼

这确实是我忽略的地方,
一定要修改!!!!!!!!!!!
多谢3楼!!!

5 楼

这是我改进后的程序,
请3楼的仁兄和各位看一看还有没有疏忽


#include<conio.h>
#include<math.h>
#include<conio.h>
#include<string.h>

char sig[4]={'+','-','*','/'};

void fun(float n[],char ch[][50],int m)
{
int x[2],y,i,j;
float num[4];
char cc[4][50];
if(m==1)
{
    if(fabs(n[0]-24.0)<0.0001)
    {
        printf("\n%s=24",ch[0]);
        getch();
        exit(0);
    }
}
else
{
   for(x[0]=0;x[0]<m;x[0]++)
   {
      for(x[1]=0;x[1]<m;x[1]++)
      {
         if(x[1]==x[0])continue;
         for(y=0;y<4;y++)
         {
           switch(y)
           {
        case 0: num[0]=n[x[0]]+n[x[1]];break;
        case 1: num[0]=n[x[0]]-n[x[1]];break;
        case 2: num[0]=n[x[0]]*n[x[1]];break;
        case 3: if(n[x[1]]==0)break;
            num[0]=n[x[0]]/n[x[1]];break;
            default:break;
       }
       if(y!=3||n[x[1]]!=0)
         sprintf(cc[0],"(%s%c%s)",ch[x[0]],sig[y],ch[x[1]]);
       for(i=0,j=1;i<m;i++)
              if(i!=x[0]&&i!=x[1])
              {
                 num[j]=n[i];
         strcpy(cc[j],ch[i]);
                 j++;
              }
       fun(num,cc,m-1);
         }
       }
     }
  }
}

/***********************/
main()
{
  float num[4];
  int i;
  char cx[4][50];

  clrscr();
  printf("Please input 4 integers:");
  for(i=0;i<4;i++)
     scanf("%f",&num[i]);
  
  for(i=0;i<4;i++)
     {
        sprintf(cx[i],"%d",(int)num[i]);
     }
  
  fun(num,cx,4);
  printf("no answer!");
  getch();
}


6 楼

可以用C++去写吗?我对C不熟悉……

7 楼

不是吧,
楼主,
 
你看一下程序:
把算法弄懂了,
自己编吧,

我是比较喜欢用TC编写程序

8 楼

好吧,谢谢你哦

9 楼

不错...思路很好!

10 楼

还是有问题啊~~如果输入浮点数会出现错误,不过我用的是tc3.0,请大家试试~~!

我来回复

您尚未登录,请登录后再回复。点此登录或注册