荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Version (Who makes history and why), 信区: Program
标  题: 求解24点的C程序(转载)
发信站: 荔园晨风BBS站 (Tue Mar 25 18:36:09 2003), 站内信件

// Fantastic FIRE of Tiny Bug Studio 郁明
//联络:F_FIRE@990.net  bp:52330*750999
#include <stdio.h>
#include <stdlib.h>                 //system(),exit()
#include <conio.h>                  // clrscr()
#define DA 24
float op(float,float,float);   //运算
int pai[4];         //四张牌pai[1]--pai[4]
void suanfa(int pai[]);        //主算法(穷举)
char *fh(int t);        //显示符号
void main(void)
{
clrscr();         //清屏
printf ("\t\t傻瓜法算%d点 (穷举计算)      \n>=|> Fantastic FIRE 异火制作  F_
FIRE@990.net <|=<\n",DA);
do {printf ("\n请输入第一张牌:");if(scanf("%d",&pai[1])==0) exit(1);}while(p
ai[1]==0);    //不允许输入0
do {printf ("\n请输入第二张牌:");if(scanf("%d",&pai[2])==0) exit(1);}while(p
ai[2]==0);
do {printf ("\n请输入第三张牌:");if(scanf("%d",&pai[3])==0) exit(1);}while(p
ai[3]==0);
do {printf ("\n请输入第四张牌:");if(scanf("%d",&pai[4])==0) exit(1);}while(p
ai[4]==0);
suanfa(pai);
clrscr();
system ("type 24.log|more");    //分页显示24.log结果文件
}
char *fh(int t)
{
 switch (t){
 case 4:return " 加 " ;break;
 case 2:return " 减 " ;break;
 case 3:return " 乘 " ;break;
 case 1:return "除以" ;break;
 default:{ printf("Bug!\n"); exit(1);}     //内部测试使用
}}
int op(int x,int y,int n)
{
  switch (n) {
  case 4: return x+y;break;
  case 2: return x-y;break;
  case 3: return x*y;break;
  case 1: if(y==0){return 0.1;break;}else return x/y;break; //过滤掉 y=0 时候
的计算
  default:{ printf("Bug!\n"); exit(1);}
}}
void suanfa(int pai[])
{
FILE *out;   // 24.log
out=fopen("24.log","w+");
fprintf (out,"\n您输入的四张牌是:%d %d %d %d\n答案如下:\n\n",pai[1],pai[2],p
ai[3],pai[4]);
register int jsq=0;   //计数器
register int i,j,k, l,m,n,o;  //3个符号,4张牌
for (i=4;i>=1;i--)
for (j=4;j>=1;j--)
for (k=4;k>=1;k--)
for (l=4;l>=1;l--)      // 穷举
for (m=4;m>=1;m--)
for (n=4;n>=1;n--)
for (o=4;o>=1;o--)
 { if((l!=m)&&(l!=n)&&(l!=o)&&(m!=n)&&(m!=o)&&(n!=o)&&
 op(
    op(
       op(pai[l],pai[m],i)
     ,pai[n],j)
        ,pai[o],k)==24)
    {
    printf (">");
    fprintf (out,"[(%d%s",pai[l],fh(i));
    fprintf (out,"%d)%s",pai[m],fh(j));
    fprintf (out,"%d)%s",pai[n],fh(k));
    fprintf (out,"%d]  等于%d",pai[o],DA);
    fprintf (out,"\n\n");jsq++;
    }
    else if((l!=m)&&(l!=n)&&(l!=o)&&(m!=n)&&(m!=o)&&(n!=o)&&
      op(pai[l],
         op(pai[m],
     op(pai[n],pai[o],i)
          ,j)
             ,k)==DA)  //过滤1
    {
    printf (">");
    fprintf (out,"%d%s",pai[l],fh(k));
    fprintf (out,"[%d%s",pai[m],fh(j));
    fprintf (out,"(%d%s",pai[n],fh(i));
    fprintf (out,"%d)]  等于%d",pai[o],DA);fprintf (out,"\n\n");jsq++;
    }
    else
    {register int q,r,k;
     q=op(pai[n],pai[o],j);
     r=op(pai[l],pai[m],i);
    if((l!=m)&&(l!=n)&&(l!=o)&&(m!=n)&&(m!=o)&&(n!=o)&&op(q,r,k)==DA) //第二
种情况过滤
      {
       printf (">");
       fprintf (out,"(%d%s",pai[n],fh(j));
       fprintf (out,"%d)%s",pai[o],fh(k));
       fprintf (out,"(%d%s",pai[l],fh(i));
       fprintf (out,"%d)  等于%d",pai[m],DA);fprintf (out,"\n\n");jsq++;
      }
   }
 }
fprintf (out,"您要的正确答案总共有 %d 种",jsq);
fclose(out);
}


--
                      *
          *                                  *
                          *             *
                      no more to say
                  ★     just wish you   ★
                            good luck

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.50]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店