• 搭积木


    小明最近喜欢搭数字积木,

    一共有10块积木,每个积木上有一个数字,0~9。

    搭积木规则:

    每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。

    最后搭成4层的金字塔形,必须用完所有的积木。

    下面是两种合格的搭法:

       0
      1 2
     3 4 5
    6 7 8 9
    
       0
      3 1
     7 5 2
    9 8 6 4    
    

    请你计算这样的搭法一共有多少种?

    请填表示总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

    答案 (5分)

    代码:

    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    int s[11];
    bool vis[10];
    int c;
    int d[7][2] = {0,0,2,3,4,5,5,6,7,8,8,9,9,10};
    bool check() {
        for(int i = 1;i <= 6;i ++) {
            if(s[i] > s[d[i][0]] || s[i] > s[d[i][1]]) return false;
        }
        return true;
    }
    void dfs(int k) {
        if(k > 10) {
            if(check()) c ++;
            return;
        }
        for(int i = 0;i < 10;i ++) {
            if(!vis[i]) {
                vis[i] = true;
                s[k] = i;
                dfs(k + 1);
                vis[i] = false;
            }
        }
    }
    int main() {
        dfs(1);
        printf("%d",c);
    }
    public class Main {
        private static int [] s = new int[10];
        private static int c = 0;
        private static int [] dl = {1,3,4,6,7,8};
        private static int [] dr = {2,4,5,7,8,9};
        private static boolean [] vis = new boolean[10];
        private static boolean check() {
            for(int i = 0;i < 6;i ++) {
                if(s[i] > s[dl[i]] || s[i] > s[dr[i]]) return false;
            }
            return true;
        }
        private static void dfs(int k) {
            if(k >= 10) {
                if(check()) c ++;
                return;
            }
            for(int i = 0;i < 10;i ++) {
                if(vis[i]) continue;
                vis[i] = true;
                s[k] = i;
                dfs(k + 1);
                vis[i] = false;
            }
        }
        public static void main(String[] args) {
            dfs(0);
            System.out.println(c);
        }
    }
  • 相关阅读:
    怎么样通过API函数获取tooltip的内容(请高手帮忙)
    Ajax控件之Accordion控件学习
    C#中结构与类的区别
    C# ref and out 区别
    java 将PDF文件的首页提取为图片
    围住浮动元素(消除浮动)的三种方法
    myeclipse unable to install breakpoint
    C#调用C++编写的COM DLL
    高手教你玩53kf在线客服的指定客服功能
    让IIS支持Flv的详细设置方法
  • 原文地址:https://www.cnblogs.com/8023spz/p/10365667.html
Copyright © 2020-2023  润新知