题解 | #24点游戏算法#

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 += b[tx];
        if (dfs(tx, sum+b[tx])||dfs(tx, sum-b[tx])||dfs(tx, sum*b[tx])||dfs(tx, sum/b[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;
}


全部评论
此代码是正确的
点赞 回复 分享
发布于 2022-09-02 15:44 浙江

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
孤寡孤寡的牛牛很热情:为什么我2本9硕投了很多,都是简历或者挂,难道那个恶心人的测评真的得认真做吗
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-26 16:06
已编辑
快手电商 后端 23k-35k
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务