题解 | #24点游戏算法#为啥9 7 9 10通过不了啊

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

#include<stdio.h>
#include<string.h>
float num[4] ;
int his[4] = { 0 };
int v[4]={0};
float b[4]={0};
int ans;
float sum;
int flag=0;
int dfs(int x, float sum)
{
    if (x == 3)
    {
        if (sum == 24.0)
        {
            return 1;
        }
        else { return 0; }
    }
    int tx;
    tx = x + 1;
    if (tx >= 0 && tx <= 3 && his[tx] == 0)
    {
        his[tx] = 1;
        sum += num[tx];
        if (dfs(tx, sum+num[tx])||dfs(tx, sum-num[tx])||dfs(tx, sum*num[tx])||dfs(tx, sum/num[tx]))
        {
            return 1;
        }
        else { his[tx] = 0; }
    }
    return 0;
}

void dfs2(int i)
{
    if(i>=4)
    {
        ans++;
        sum=b[0];
        his[0]=1;
        if(dfs(0,sum)==1){
            flag=1;
            //printf("%f %f %f %f",b[0],b[1],b[2],b[3]);
        }
        return;
    }
    for(int k=0;k<4;k++)
    {
        if(k>0&&num[k]==num[k-1]&&v[k-1]==0){continue;}
        if(v[k]==0)
        {
            v[k]=1;
            b[i]=num[k];
            dfs2(i+1);
            v[k]=0;
        }
    }
    return;
}
int main(void)
{
    for (int i = 0; i < 4; i++)
    {
        scanf("%f", &num[i]);
    }//输入完成
    //求全排列
    //先冒泡排序,为的是将相同元素移动到相邻位置,便于后续去重
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4-1-i;j++)
        {
            if(num[j]>num[j+1])
            {
                float temp;
                temp=num[j+1];
                num[j+1]=num[j];
                num[j]=temp;
            }
        }
    }
    dfs2(0);
    if(flag==0){printf("false");}
    else{printf("true");}
   // float test=5.0/2.0;
   //printf("%f",test);
    return 0;
}

全部评论

相关推荐

10-15 12:03
厦门大学 后端
让你们狠狠赚一笔:一个人10分钟他能了解到什么?
点赞 评论 收藏
分享
害怕一个人的小黄鸭胖乎乎:笑死了,没有技术大牛,招一堆应届生,不到半年,代码就成屎山了
点赞 评论 收藏
分享
勇敢的联想人前程似锦:是联想你10月才投吗?联想10月份面试都已经结束了。联想8月5号就开了。联想,你可以试一下春招应该还有机会。到时候你可以联系我给你内推。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务