• 第七届 蓝桥杯 6、寒假作业


    现在小学的数学题目也不是那么好玩的。
    看看这个寒假作业:
    □ + □ = □
    □ - □ = □
    □ × □ = □
    □ ÷ □ = □
    每个方块代表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
    就算两种解法。(加法,乘法交换律后算不同的方案)
    你一共找到了多少种方案?
    请填写表示方案数目的整数。
    注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

    //暴力解法,遍历
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int main()
    {    
        int ans=0;
        int  a[] = {10,11,12,13,1,2,3,4,5,6,7,8,9};
        do{
            if((a[1]+a[2]==a[3])&&(a[4]-a[5]==a[6])&&(a[7]*a[8]==a[9])&&(a[10]==a[11]*a[12]))
            ans+=1;
        }while(next_permutation(a,a+13));
        cout<<ans<<endl;
        return 0;
    }

    dfs一个一个填,每个等式判断一下。有点类似于前面全排列的那个题‘

    #include <bits/stdc++.h>
    using namespace std;
    
    bool used[15];
    int a[15];
    int ans=0;
    
    void dfs(int dep)
    {
        if (dep==13) {
            //必须整除,变成乘法判断
            if (a[10]==a[11]*a[12]) ans++;
            return;
        }
        if (dep==10) {
            if (a[7]*a[8]!=a[9]) return;
        }
        if (dep==7) {
            if (a[4]-a[5]!=a[6]) return;
        }
        if (dep==4) {
            if (a[1]+a[2]!=a[3]) return;
        }
        for (int i=1;i<=13;i++) {
            if (!used[i]) {
                used[i]=true;
                a[dep]=i;
                dfs(dep+1);
                a[dep]=-1;
                used[i]=false;
            }
        }
    }
    
    int main()
    {
        dfs(1);
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    离鞘剑(四)
    Node.js 蚕食计划(四)—— Express + SQL Server 搭建电影网站
    离鞘剑(三)
    python数据类型(第三弹)
    python数据类型(第二弹)
    python数据类型(第一弹)
    开发工具的安装与使用(总结篇)
    开发工具的安装与使用(第四弹)
    PriorityQueue和PriorityBlockingQueue
    一文弄懂java中的Queue家族
  • 原文地址:https://www.cnblogs.com/hcw110/p/10582318.html
Copyright © 2020-2023  润新知