荔园在线

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

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


发信人: Version (Who makes history and why), 信区: Program
标  题: 24点                                   Penrose (转寄)[转载]
发信站: 荔园晨风BBS站 (Sat Mar 15 17:47:13 2003), 站内信件

【 以下文字转载自 Version 的信箱 】
【 原文由 pcAngel(风过留枫) 所发表 】
发信人: Colgate (高露洁), 信区: Programming
标  题: 24点问题。我在别的BBS拷贝过来的。不好意思
发信站: BBS 水木清华站 (Wed Nov 28 14:27:06 2001)

// RESULT.cpp : Defines the entry point for the console application.
//
//穷尽所有可能的组合
//对每种组合做+,-,* ,/
//不同的运算
#include <stdafx.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <malloc.h>
#define MAX 4
#define RESULT 24
int a[MAX]={5,4,3,2};//原始数据
int A[MAX];//采用的数据相当于stack
int b[MAX];//不同层次,对与a中数据是否已经使用
char  c[MAX];//保存符号
int bFound;//是否发现
int bPrev=0;
void tf(float x,int l);//进行四种运算
void out(float y,int l);//判断是继续运算,还是输出结果
char *PFormat();
int main(int argc, char* argv[])
{

    int i;
    for(i=0;i<MAX;i++)//初始化
        A[i]=0;
    bFound=0;

    tf(0,0);
    if(bFound==0)
    {
        printf("\n没有发现");
    }
    getchar();

    return 0;
}
void tf(float x,int l)
//x,上一次运算的结果
//l,当前所在运算的步数,也即层次
{
    int i;
    float y;
    int B[MAX];
    for(i=0;i<MAX;i++)
        B[i]=0;


    for(i=0;i<MAX;i++)
    {
        if(b[i]==0 && B[i]==0)
        {
            A[l]=a[i];
            b[i]=1;
            B[i]=1;
            if(l==0)//层次为0,为第一个数
            {
                c[l]=' ';
                y=a[i];
                out(y,l+1);
            }
            else{
                c[l]='+';
                y=x+a[i];
                out(y,l+1);
                c[l]='-';
                y=x-a[i];
                out(y,l+1);
                c[l]='*';
                y=x*a[i];
                out(y,l+1);
                c[l]='/';
                y=x/a[i];
                out(y,l+1);
            }
            b[i]=0;

        }
    }

}
void out(float y,int l)
//y,上一次运算的结果
//l,当前所在运算的步数,也即层次
{
    int i;
    char *p;
    if(l==MAX)//层次为MAX,已运算到最后,不需继续
    {
        if(y==RESULT)//结果对吗?
        {
            bFound=1;
            printf("\nFound\n");
            //          for(i=0;i<MAX;i++)
            //          {
            //
            //          printf(" %c %d",c[i],A[i]);
            //          }
            p=PFormat();
            printf("%s=%d",p,RESULT);//格式化输出

            getchar();
        }
    }
    else
    {
            tf(y,l);//继续运算
    }

}
//格式化输出
//当由+,-转向*,/需要加()
char * PFormat()
{

    char tmp[1024];
    //(char *)malloc((MAX-2)*2);
    static  char s[1024];
    //=(char *)malloc((MAX-2)*2);
    int i;
    memset(tmp,0x00,sizeof(tmp));
    memset(s,0x00,sizeof(s));
    for(i=0;i<MAX;i++)
    {

        if(c[i]=='+'|c[i]=='-')
        {
            bPrev=0;
            sprintf(tmp,"%s",s);
        }
        else if (bPrev==0 && (c[i]=='*' || c[i]=='/'))//优先改变
        {
            sprintf(tmp,"(%s)",s);
            bPrev=1;
        }
        else
        {
            sprintf(tmp,"%s",s);
            bPrev=1;
        }

            sprintf(s,"%s %c %d ",tmp,c[i],A[i]);


    }

    return s;
}


--

※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.115.22.148]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.50]


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

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