24点算法

原创 2007年09月21日 22:13:00
 感觉这个程序是在七拼八凑..-_-||
#include "stdio.h"//24点算法 
#include "stdlib.h"
int main()
...{
    
int ss(int ,int ,int ,int );
    
void pre(int*,int,int);
    
int k=0,a[4];
    scanf(
"%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);
    ss(a[
0],a[1],a[2],a[3]);
    
while(++k<24)...{
                  pre(a,
24,k);
                  ss(a[
0],a[1],a[2],a[3]);
                  }

    system(
"pause");
    
return 0;
}

void pre(int a[],int i,int k)//全排列 
...{
     
int t,j,e;
     
if(k<i)...{
          
for(e=k,j=1;!(e%(j+1));e/=j,j++);//交换第几位 
          
          
for(e=1;e*2<j;e++)
          
...{t=a[e];a[e]=a[j-e];a[j-e]=t;}//位中排序 
              
          t
=a[j];a[j]=a[0];a[0]=t;}

}

int ss(int a,int  b,int  c,int d)//符号枚举 
...{
    
void account(int*,int*,int,int);
    
int e,f,g,res1,res2,res3;
    
char sign[]=...{'+','*','-','/','#','$'};
    
for(e=0;e<4;e++)
      
for(f=0;f<6;f++)
        
for(g=0;g<6;g++)
        
...{
        res1
=a;res2=1;
        account(
&res1,&res2,e,b);
        account(
&res1,&res2,f,c);
        account(
&res1,&res2,g,d);//((a?b)?c)?d
        if(res2!=0 && res1%res2==0 && res1/res2==24)...{//((a?b)?c)?d
              if(f>=4 && g<4)printf("(%d %c (%d %c %d)) %c %d ",c,sign[f-2],a,sign[e],b,sign[g],d);
              
else if(f>=4 &&g>=4)printf("%d %c (%d %c (%d %c %d)) ",d,sign[g-2],c,sign[f-2],a,sign[e],b);
              
else if(f<4 && g>=4)printf("%d %c ((%d %c %d) %c %d) ",d,sign[g-2],a,sign[e],b,sign[f],c);
              
else printf("((%d %c %d) %c %d) %c %d ",a,sign[e],b,sign[f],c,sign[g],d);
              }

        
if(g==2)...{
        res1
=a;res2=1;
        account(
&res1,&res2,e,b);
        account(
&res1,&res2,f,c-d);
        
if(res2!=0 && res1%res2==0 && res1/res2==24)...{//(a?b)?(c?d)
           if(f>=4)printf("(%d %c %d) %c (%d %c %d) ",c,sign[g],d,sign[f-2],a,sign[e],b);
           
else printf("(%d %c %d) %c (%d %c %d) ",a,sign[e],b,sign[f],c,sign[g],d);
           }

        }

        }

    
return 0;
}

void account(int *a,int *b,int sig,int num)
...{
    
int res1,res2,t;
    res1
=*a;res2=*b;
         
if(sig==0)res1+=num*res2;
    
else if(sig==2)res1-=num*res2;
    
else if(sig==1)res1*=num;
    
else if(sig==3)res2*=num;
    
else if(sig==4)res1=num*res2-res1;
    
else if(sig==5)...{t=res1;res1=res2;res2=t;res1*=num;}
    
*a=res1;*b=res2;        
}

24点算法详解--Java代码实现

在网上看了很多的24点,结果都不尽人意,然后从学长那弄来了代码仔细研究了一番,以下是我对该算法原理及实现的理解 注:对于52张 扑克牌构成的27万多种可能的组合,代码经测试平均用时15秒,即可计算出...

算12/24点算法 布线问题/迷宫最短路径

算法分析的课程设计,做了一个布线went

c/c++算法之“24点”经典问题

24点游戏是一种使用扑克牌来进行的益智类游戏,游戏内容是:从一副扑克牌中抽去大小王剩下52张,任意抽取4张牌,把牌面上的数(A代表1)运用加、减、乘、除和括号进行运算得出24。每张牌都必须使用一次,但...

24点算法进度1

突然想写一个算24的程序,昨晚弄到晚上4点,在分析存在多少种情况,虽然可能对编程的作用不大,只是想考验一下自己的数学功底,将我写的笔记发表如下,估计很多人看了脑袋晕,不过我还算清晰:模式(运算先后顺序...

面试失败之24点算法

周一风尘仆仆(上午6点抵达成都)的去参加了凡客成都研发中心的面试,虽然经历一夜的折腾让我感觉头脑很不清醒,不过这种面试状态也不错,能让我深刻体验一下在不清醒状态下进行的思考和回答问题。午饭过后便出了门...

24点游戏算法-华为OJ

网上搜了一些答案,发现有些答案在3个数运算等于24后就返回true了,明显不对。 这里还是用全排列忽略掉+-*/的优先顺序,然后对每一个排列进行dfs。import java.util.*; pub...

24点游戏算法(C语言实现)

转自:点击打开链接   一般而言,我理解的24点游戏是用4个数字经过数学运行,得到24. 一般推广版的应该使用扑克的52张牌(出去大小王),A表示1,K表示13.任意4张牌看是否能够组合得到24....
  • CTO_51
  • CTO_51
  • 2013年04月22日 10:59
  • 12331

编程之美————24点游戏算法

一,概述         二十四点是一种益智游戏,它能在游戏中锻炼人们的心算,它往往要求人们将四个数字进行加减乘除(允许使用括号)求得二十四。然后将四个数字的计算公式表示出来。 ...

24点扑克牌游戏编程算法详解

24点扑克牌游戏,简单点来说就是:一副扑克牌去掉大小王,任意发四张牌给玩家,玩家要将这四张牌做加减乘除运算,规则是四张牌的顺序不定但不可以重复,计算结果如果是24则玩家赢。本程序实现让计算机自动派牌,...

数据结构和算法设计专题之---24点游戏(穷举法和递归法)

一个简单的24点程序        下面本文将通过两个题目实例,分别给出用递归方法和循环方法的解决方案以及解题思路,便于读者更好地掌握两种方法。首先是一个简单的计算24点的问题(为了简化问题,我...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:24点算法
举报原因:
原因补充:

(最多只允许输入30个字)