• 寒假作业---蓝桥杯---DFS


             题目描述

    现在小学的数学题目也不是那么好玩的。
    看看这个寒假作业:

    每个方块代表1~13中的某一个数字,但不能重复。
    比如:
    6  + 7 = 13
    9  - 8 = 1
    3  * 4 = 12
    10 / 2 = 5
    以及: 
    7  + 6 = 13
    9  - 8 = 1
    3 * 4 = 12
    10 / 2 = 5
    就算两种解法。(加法,乘法交换律后算不同的方案)
    你一共找到了多少种方案?
    答案:64
     
    #include<iostream>
    #include<string>
    #include<string.h>
    #include<algorithm>
    #include<queue>
    using namespace std;
    double a[4][3];
    int vis[15];
    int ans=0;
    int check(int x,int y,int num)
    {
        if(x==0&&y<2)
            return 1;
        if(x==0&&y==2)
        {
            if(a[0][0]+a[0][1]==num)
                return 1;
            else
                return 0;
        }
        if(x==1&&y<2)
            return 1;
        if(x==1&&y==2)
        {
            if(a[1][0]-a[1][1]==num)
                return 1;
            else
                return 0;
        }
        if(x==2&&y<2)
            return 1;
        if(x==2&&y==2)
        {
            if(a[2][0]*a[2][1]==num)
                return 1;
            else
                return 0;
        }
        if(x==3&&y<2)
            return 1;
        if(x==3&&y==2)
        {
            if(a[3][0]/a[3][1]==num)//-------注意除法的时候要用double,否则会多算好多
                return 1;
            else
                return 0;
        }
        return 0;
    
    }
    void dfs(int x,int y)
    {
        if(x==4)
        {
            ans++;
            // for(int i=0;i<4;i++)
            // {
            //     for(int j=0;j<3;j++)
            //         cout<<a[i][j]<<' ';
            //     cout<<endl;
            // }
            return ;
        }
        if(y>=3)
            dfs(x+1,0);
        for(int i=1;i<=13;i++)
        {
            if(vis[i]==0&&check(x,y,i))
            {
                a[x][y]=i;
                vis[i]=1;
                dfs(x,y+1);
                vis[i]=0;
            }
        }
    }
    int main()
    {
        memset(vis,0,sizeof(vis));
        dfs(0,0);
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    DB2、ORACLE SQL写法的主要区别
    最快的序列化组件protobuf的.net版本protobuf.net
    Oracle迁移到DB2常用转换
    模拟百度分页算法
    MySQL 自关联查询
    python 实现cm批量上传
    python实现京东秒杀
    百度地图商家爬虫
    django BBS
    python 堆排序
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12305341.html
Copyright © 2020-2023  润新知