现在的位置: 首页 > 综合 > 正文

24点游戏(粗判是否成立)

2017年11月21日 ⁄ 综合 ⁄ 共 951字 ⁄ 字号 评论关闭

24点游戏,这个只是让你输入4个数,判断是否可以构成24点。理解了感觉不是太难。

大致思路:一开始从四个数里面挑两个数进行运算,然后和剩下的数放入一个数组中继续判断,之后就是从三个数中再挑两个进行运算,如此如此。

跑了15ms.

#include <stdio.h>
#define eps 1e-8
struct node
{
    double a[4];
    int len;
}mathe;
int sig(double a)
{
    return (a>eps)-(a<-eps);
}
void out(struct node n)
{
    int i;
    for(i=0;i<n.len;i++)
        printf("**%lf\n",n.a[i]);
    printf("\n");
}
int can(struct node m)
{
    if(m.len==1)
    {
        if(sig(m.a[0]-24)==0) return 1;
        return 0;
    }
    int i,j,k;
    for(i=0;i<m.len;i++)
    {
        for(j=0;j<m.len;j++)
        {
            struct node n;
               // int top=0;
                n.len=0;
            if(i!=j)
            {
                for(k=0;k<m.len;k++)
                {
                    if(k!=i&&k!=j) {n.a[n.len++]=m.a[k];}
                }
               // n.len+=1;
               // out(n);
               int tmp=n.len;
               n.len+=1;
                n.a[tmp]=m.a[i]*m.a[j];
                if(can(n)) return 1;
                n.a[tmp]=m.a[i]+m.a[j];
                if(can(n)) return 1;
                n.a[tmp]=m.a[i]-m.a[j];
                if(can(n)) return 1;
                if(sig(m.a[j]))
                {
                    n.a[tmp]=m.a[i]/m.a[j];
                    if(can(n)) return 1;
                }
            }
        }
    }
    return 0;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        //int a[4];
        scanf("%lf%lf%lf%lf",&mathe.a[0],&mathe.a[1],&mathe.a[2],&mathe.a[3]);
        mathe.len=4;
        if(can(mathe)) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}
【上篇】
【下篇】

抱歉!评论已关闭.