免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1811 | 回复: 5
打印 上一主题 下一主题

24点分享 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-14 00:58 |只看该作者 |倒序浏览
相信大家好多人写过24点游戏程序
推荐大家分享一下

论坛徽章:
0
2 [报告]
发表于 2007-07-14 01:00 |只看该作者
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream.h>
#define error 10000
#define NO 24
#define PRT m++,bb[tt][0],ch[i],bb[tt][1],ch[j],bb[tt][2],ch[k],bb[tt][3]
float f(float a,float b,int i){
    if(i==0)return(a+b);
    if(i==1)return(a-b);
    if(i==2)return(a*b);
    if((i==3)&&(b==0))return(error);
    if(i==3)return(a/b);
}
main()
{
    int i,j,k,tt,l,m;
    float aa[4],bb[NO][4],t1,t2,t;
    char ch[5]="+-*/";
    cout<<"NO点游戏 输入4个数字 以空格隔开!!!"<<endl;
    cout<<"input 4 NO. : ";
    cin>>aa[0]>>aa[1]>>aa[2]>>aa[3];
    //**************************************************************

    l=0;m=0;
    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;
                bb[l][0]=aa[i];
                bb[l][1]=aa[j];
                bb[l][2]=aa[k];
                bb[l++][3]=aa[6-i-j-k];               
            }
        }
        //***********************************************************

        for(tt=0;tt<l;tt++)
            for(i=0;i<4;i++)
                for(j=0;j<4;j++)
                    for(k=0;k<4;k++){
                        //(a_b)_(c_d)

                        t1=f(bb[tt][0],bb[tt][1],i);
                        t2=f(bb[tt][2],bb[tt][3],k);
                        t=f(t1,t2,j);
                        if(fabs(t-NO)<.001)
                            printf("%02d ( %2.2f %c %2.2f ) %c ( %2.2f %c %2.2f)\n",PRT);            
                        //((a_b)_c)_d

                        t1=f(bb[tt][0],bb[tt][1],i);
                        t2=f(t1,bb[tt][2],j);
                        t=f(t2,bb[tt][3],k);
                        if(fabs(t-NO)<.001)
                            printf("%02d ((%2.2f %c %2.2f ) %c %2.2f ) %c %2.2f\n",PRT);
                        //a_(b_(c_d))

                        t1=f(bb[tt][2],bb[tt][3],k);
                        t2=f(bb[tt][1],t1,j);
                        t=f(bb[tt][0],t2,i);
                        if(fabs(t-NO)<.001)
                            printf("%02d %2.2f %c (%2.2f %c (%2.2f %c %2.2f))\n",PRT);
                        //(a_(b_c))_d

                        t1=f(bb[tt][1],bb[tt][2],j);
                        t2=f(bb[tt][0],t1,i);
                        t=f(t2,bb[tt][3],k);
                        if(fabs(t-NO)<.001)
                            printf("%02d (%2.2f %c (%2.2f %c %2.2f)) %c %2.2f\n",PRT);
                        //a_((b_c)_d)

                        t1=f(bb[tt][1],bb[tt][2],j);
                        t2=f(t1,bb[tt][3],k);
                        t=f(bb[tt][0],t2,i);
                        if(fabs(t-NO)<.001)
                            printf("%02d %2.2f %c((%2.2f %c %2.2f) %c %2.2f)\n",PRT);
                        
                    }
}

论坛徽章:
0
3 [报告]
发表于 2007-07-14 01:09 |只看该作者
以上是以前写的
以下是最近写的

论坛徽章:
0
4 [报告]
发表于 2007-07-14 01:10 |只看该作者
#include &quot;stdio.h&quot;
#include &quot;stdlib.h&quot;
#include &quot;memory.h&quot;
#include &quot;math.h&quot;
#include &quot;string.h&quot;
void ok(double input[],char str[][50],int no,double jg);
int cnmnext(int cnm[],int no,int js){
&nbsp;&nbsp;&nbsp;&nbsp;for(int i=js-1;i&gt;=0;i--)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(cnm[i]&lt;no-js+i){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnm[i]++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int j=i+1;j&lt;js;j++)cnm[j]=cnm[i]+j-i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}//cnm的状态

void change(double input[],char str[][50],int cnm[],int no,double t){
&nbsp;&nbsp;&nbsp;&nbsp;for(int i=0,j=0;i&lt;no;i++){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i==cnm[0] || i==cnm[1])continue;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input[j]=input[i];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(str[j++],str[i]);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;strcpy(str[j],str[no]);
&nbsp;&nbsp;&nbsp;&nbsp;input[j]=t;
}//得到下一ok函数的输入

void cal(char str[][50],char sth[][50],double input[],double temp[],int cnm[],int no,double jg,char ch,int flg)
{
&nbsp;&nbsp;&nbsp;&nbsp;double t;
&nbsp;&nbsp;&nbsp;&nbsp;memcpy(str,sth,50*no);
&nbsp;&nbsp;&nbsp;&nbsp;memcpy(input,temp,sizeof(double)*no);&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;switch(ch){
&nbsp;&nbsp;&nbsp;&nbsp;case '+':t=input[cnm[flg]]+input[cnm[(flg+1)%2]];break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    &nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;case '*':t=input[cnm[flg]]*input[cnm[(flg+1)%2]];break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
&nbsp;&nbsp;&nbsp;&nbsp;case '-':t=input[cnm[flg]]-input[cnm[(flg+1)%2]];break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;&nbsp;    &nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;case '/':
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(fabs(input[cnm[(flg+1)%2]]-0)&gt;0.001){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=input[cnm[flg]]/input[cnm[(flg+1)%2]];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else return;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;sprintf(str[no],&quot;(%s%c%s)&quot;,str[cnm[flg]],ch,str[cnm[(flg+1)%2]]);
&nbsp;&nbsp;&nbsp;&nbsp;change(input,str,cnm,no,t);
&nbsp;&nbsp;&nbsp;&nbsp;ok(input,str,no-1,jg);
}
void ok(double input[],char str[][50],int no,double jg){
&nbsp;&nbsp;&nbsp;&nbsp;if((no==1) ){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(fabs(input[0]-jg)&lt;0.0001)printf(&quot;%s  =  %f\n&quot;,str[2],input[0]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;char sth[10][50];
&nbsp;&nbsp;&nbsp;&nbsp;int cnm[2]={0,1};
&nbsp;&nbsp;&nbsp;&nbsp;double temp[10];
&nbsp;&nbsp;&nbsp;&nbsp;memcpy(sth,str,50*no);
&nbsp;&nbsp;&nbsp;&nbsp;memcpy(temp,input,sizeof(double)*no);
&nbsp;&nbsp;&nbsp;&nbsp;do{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal(str,sth,input,temp,cnm,no,jg,'+',0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal(str,sth,input,temp,cnm,no,jg,'*',0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal(str,sth,input,temp,cnm,no,jg,'-',0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal(str,sth,input,temp,cnm,no,jg,'-',1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal(str,sth,input,temp,cnm,no,jg,'/',0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal(str,sth,input,temp,cnm,no,jg,'/',1);&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;}while(cnmnext(cnm,no,2));
}
main()
{
&nbsp;&nbsp;&nbsp;&nbsp;double input[]={3,6,6,10,5,7};//要计算的数组1,5,6,8.5,6,7,9,6

&nbsp;&nbsp;&nbsp;&nbsp;char str[10][50]={0},ch[50];
&nbsp;&nbsp;&nbsp;&nbsp;for(int i=0;i&lt;10;i++){//初始化str

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gcvt(input[i],8,ch);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(str[i],ch);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;//input存储数组,str存储结果,数组前no个数任意组合得到jg的结果

&nbsp;&nbsp;&nbsp;&nbsp;ok(input,str,6,24);
}

论坛徽章:
0
5 [报告]
发表于 2007-07-14 01:24 |只看该作者

??

??

[ 本帖最后由 funnyt 于 2007-7-14 01:40 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-07-14 01:51 |只看该作者
gt,lt是哪里定义的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP