zoukankan      html  css  js  c++  java
  • 蓝桥杯 ——积木问题——C++

    问题描述:

    小明最近喜欢搭数字积木。一共有10块积木,每个积木上有一个数字,0~9。

    搭积木规则:
    每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
    最后搭成4层的金字塔形,必须用完所有的积木。

    下面是两种合格的搭法:

    0
    1 2
    3 4 5
    6 7 8 9

    0
    3 1
    7 5 2
    9 8 6 4

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

    解题思路:

    利用函数产生全排列,然后逐一排除;

    源代码:

    #include<iostream>
    #include<cstring>
    using namespace std;
    string X="0123456789";//数据结构 
    int N=0;//全局变量  记录方案数 
    bool Test();
    void Show(); 
    void Permutation(int k)//以字符串为数据结构产生全排列 
    {  
         if(k==X.length()-1)
         {
             if(Test())
             {
                 Show();
                 N++;
             }
             return ;
         }
         for(int i=k; i<X.length(); i++)
         {
             char temp;
             temp=X[k];
             X[k]=X[i];
             X[i]=temp;
             Permutation(k+1);
             X[i]=X[k];
             X[k]=temp;
         }
     }
    bool Test()  //检验排列是否合法 
    {
        if(X[0]>X[1]) return 0;
        if(X[0]>X[2]) return 0;
        if(X[1]>X[3]) return 0;
        if(X[1]>X[4]) return 0;
        if(X[2]>X[4]) return 0;
        if(X[2]>X[5]) return 0;
        if(X[3]>X[6]) return 0;
        if(X[3]>X[7]) return 0;
        if(X[4]>X[7]) return 0;
        if(X[4]>X[8]) return 0;
        if(X[5]>X[8]) return 0;
        if(X[5]>X[9]) return 0;
        return 1;
    }
    void Show()  //塔型输出 
    {
        cout<<X[0]<<endl;
        cout<<X[1]<<" "<<X[2]<<endl;
        cout<<X[3]<<" "<<X[4]<<" "<<X[5]<<endl;
        cout<<X[6]<<" "<<X[7]<<" "<<X[8]<<" "<<X[9]<<endl; 
    }
    int main()
    {
        Permutation(0);
        cout<<N<<endl;
        return 0;
     } 

     运行结果:

  • 相关阅读:
    瞬间从IT屌丝变大神——HTML规范
    瞬间从IT屌丝变大神——命名规则
    瞬间从IT屌丝变大神——分工安排
    写在开发前的话
    完全二叉树的权值
    无法更改电脑默认浏览器
    java语法错误,进行分析时已经到达文件结尾
    查找SHA1值
    关闭CPU 睿频方法
    Java idea 快捷键
  • 原文地址:https://www.cnblogs.com/Howbin/p/8681802.html
Copyright © 2011-2022 走看看