Algorithm 版 (精华区)

发信人: sino (茶水博士), 信区: Theory
标  题: 24点程序
发信站: 哈工大紫丁香 (Sun Aug 27 13:29:17 2000), 转信

发信人: yuanyuan (源源), 信区: algorithm
发信站: NJU Lily BBS (Sat May 22 00:29:34 1999), 站内信件

#include <stdio.h>
  
  #include <math.h>
  
  int find_solution(float*,int,int,int,int,int,int,int);
  
  void main(void)
  
{
  
   float a[4];
  
   char b[4]={'+','-','*','/'};
  
   int count=0,result;
  
   int i,j,k,l,m1,m2,m3;
  
   printf("Please input four card(One,Two,Three,Four):");
  
   scanf("%f,%f,%f,%f",&a[0],&a[1],&a[2],&a[3]);
  
   for(i=0;i<4;i++)
  
   {
  
    for(j=0;j<4;j++)
  
    {
  
     if(j==i)
  
      continue;
  
     for(k=0;k<4;k++)
  
     {
  
      if(k==i||k==j)
  
       continue;
  
      for(l=0;l<4;l++)
  
      {
  
       if(l==i||l==j||l==k)
  
        continue;
  
       for(m1=0;m1<4;m1++)
  
       {
  
        for(m2=0;m2<4;m2++)
  
        {
  
         for(m3=0;m3<4;m3++)
  
         {
  
   if((result=find_solution(a,i,j,k,l,m1,m2,m3))!=0)
  
   {
  
    switch(result)
  
    {
  
     case 1:
  
      printf("Solution %d:((%2.0f%c%2.0f)%c%2.0f)%c%2.0f\n",count,a[i],b[m1]
,a[j],b[m2],a[k],b[m3],a[l]);
  
      break;
  
     case 2:
  
      printf("Solution %d:(%2.0f%c%2.0f)%c(%2.0f%c%2.0f)\n",count,a[i],b[m1]
,a[j],b[m2],a[k],b[m3],a[l]);
  
      break;
  
     case 3:
  
      printf("Solution %d:(%2.0f%c(%2.0f%c%2.0f))%c%2.0f\n",count,a[i],b[m1]
,a[j],b[m2],a[k],b[m3],a[l]);
  
      break;
  
     case 4:
  
      printf("Solution %d:%2.0f%c((%2.0f%c%2.0f)%c%2.0f)\n",count,a[i],b[m1]
,a[j],b[m2],a[k],b[m3],a[l]);
  
      break;
  
     case 5:
  
      printf("Solution %d:%2.0f%c(%2.0f%c(%2.0f%c%2.0f))\n",count,a[i],b[m1]
,a[j],b[m2],a[k],b[m3],a[l]);
  
      break;
  
     default:break;
  
    }
  
    count++;
  
   }
  
         }
  
        }
  
       }
  
      }
  
     }
  
    }
  
   }
  
   if(count==0)
  
    printf("No solution!\n");
  
}

  
  int find_solution(float *a,int i,int j,int k,int l,int m1,int m2,int m3)
  
{
  
   char b[4]={'+','-','*','/'};
  
   float y=0,y1,y2;
  
   switch(b[m1])
  
   {
  
    case '+':y=a[i]+a[j];break;
  
    case '-':y=a[i]-a[j];break;
  
    case '*':y=a[i]/a[j];break;
  
   }
  
   switch(b[m2])
  
   {
  
    case '+':y=y+a[k];break;
  
    case '-':y=y-a[k];break;
  
    case '*':y=y*a[k];break;
  
    case '/':y=y/a[k];break;
  
   }
  
   switch(b[m3])
  
   {
  
    case '+':y=y+a[l];break;
  
    case '-':y=y-a[l];break;
  
    case '*':y=y*a[l];break;
  
    case '/':y=y/a[l];break;
  
   }
  
   if(fabs(y-24.0)<0.1)
  
    return(1);
  
   y=0;y1=0;
  
   switch(b[m1])
  
   {
  
    case '+':y=a[i]+a[j];break;
  
    case '-':y=a[i]-a[j];break;
  
    case '*':y=a[i]*a[j];break;
  
    case '/':y=a[i]/a[j];break;
  
   }
  
   switch(b[m3])
  
   {
  
    case '+':y1=a[k]+a[l];break;
  
    case '-':y1=a[k]-a[l];break;
  
    case '*':y1=a[k]*a[l];break;
  
    case '/':y1=a[k]/a[l];break;
  
   }
  
   switch(b[m2])
  
   {
  
    case '+':y=y+y1;break;
  
    case '-':y=y-y1;break;
  
    case '*':y=y*y1;break;
  
    case '/':if(y1==0.0) y1=0.001;y=y/y1;break;
  
   }
  
   if(fabs(y-24.0)<0.1)
  
    return(2);
  
   y=0;y1=0;
  
   switch(b[m2])
  
   {
  
    case '+':y1=a[j]+a[k];break;
  
    case '-':y1=a[j]-a[k];break;
  
    case '*':y1=a[j]*a[k];break;
  
    case '/':y1=a[j]/a[k];break;
  
   }
  
   switch(b[m1])
  
   {
  
    case '+':y=a[i]+y1;break;
  
    case '-':y=a[i]-y1;break;
  
    case '*':y=a[i]*y1;break;
  
    case '/':if(y1==0.0) y1=0.001;y=a[i]/y1;break;
  
   }
  
   switch(b[m3])
  
   {
  
    case '+':y=y+a[l];break;
  
    case '-':y=y-a[l];break;
  
    case '*':y=y*a[l];break;
  
    case '/':y=y/a[l];break;
  
   }
  
   if(fabs(y-24.0)<0.1)
  
    return(3);
  
   y=0;y1=0;
  
   switch(b[m2])
  
   {
  
    case '+':y1=a[j]+a[k];break;
  
    case '-':y1=a[j]-a[k];break;
  
    case '*':y1=a[j]*a[k];break;
  
    case '/':y1=a[j]/a[k];break;
  
   }
  
   switch(b[m3])
  
   {
  
    case '+':y1=y1+a[l];break;
  
    case '-':y1=y1-a[l];break;
  
    case '*':y1=y1*a[l];break;
  
    case '/':y1=y1/a[l];break;
  
   }
  
   switch(b[m1])
  
   {
  
    case '+:y=a[i]+y1;break;
  
    case '-':y=a[i]-y1;break;
  
    case '*':y=a[i]*y1;break;
  
    case '/':if(y1==0.0) y1=0.001;y=a[i]/y1;break;
  
   }
  
   if(fabs(y-24.0)<0.1)
  
    return(4);
  
   y=0;y1=0;y2=0;
  
   switch(b[m3])
  
   {
  
    case '+':y1=a[k]+a[l];break;
  
    case '-':y1=a[k]-a[l];break;
  
    case '*':y1=a[k]*a[l];break;
  
    case '/':y1=a[k]/a[l];break;
  
   }
  
   switch(b[m2])
  
   {
  
    case '+':y2=a[j]+y1;break;
  
    case '-':y2=a[j]-y1;break;
  
    case '*':y2=a[j]*y1;break;
  
    case '/':if(y1==0.0) y1=0.001;y2=a[j]/y1;break;
  
   }
  
   switch(b[m1])
  
   {
  
    case '+':y=a[i]+y2;break;
  
    case '-':y=a[i]-y2;break;
  
    case '*':y=a[i]*y2;break;
  
    case '/':if(y2==0.0) y2=0.001;y=a[i]/y2;break;
  
   }
  
   if(fabs(y-24.0)<0.1)
  
    return(5);
  
   return(0);
  
  }
--
<><><><><><><><><><><><><><><><><><><><><><><>
<>         I AM A BIRD!I WANT FLY!          <>
<><><><><><><><><><><><><><><><><><><><><><><>
※ 修改:.fib 於 Aug 27 13:26:58 修改本文.[FROM: bbs.hit.edu.cn]
--
※ 转寄:.南京大学小百合 bbs.nju.edu.cn.[FROM: bbs.hit.edu.cn]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: fib.bbs@bbs.nju.edu.]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.487毫秒