• 枚举法--搭积木--蓝桥杯


    有两种解法:一种不优化,就是一个全排列的问题,然后限制条件

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 int a[10]={0,1,2,3,4,5,6,7,8,9};
     5 int is()
     6 {
     7     if(a[0] < a[1] && a[0] < a[2] && a[1] < a[3] && a[1] < a[4] && a[2] < a[4] && a[2] < a[5] && a[3] < a[6] && a[3] < a[7] && a[4] < a[7] && a[4] < a[8] && a[5] < a[8] && a[5] < a[9])
     8     return 1;
     9     else 
    10     return 0;
    11 }
    12 int main()
    13 {
    14     
    15     int sum=0;
    16     for(int i=0;i<10*9*8*7*6*5*4*3*2;i++)
    17     {
    18         if(is())
    19         sum++;
    20         next_permutation(a,a+10);
    21     }
    22     cout<<sum;
    23     return 0;
    24 }

    解法二:优化算法

    创新点:把这个转化成二维数组,这样的话在判断时候不用把这些都都写出来,只需要把b[i][j]和b[i+1][j] 还有b[i+1][j+1]进行比较就行 一旦发现比下面的大扥情况,就返回0,退出,否则返回1

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 int a[10]={0,1,2,3,4,5,6,7,8,9};
     5 int is()
     6 {
     7     int b[4][4];
     8     int k=0;
     9     for(int i=0;i<4;i++)
    10     {
    11         for(int j=0;j<=i;j++)
    12         {
    13             b[i][j]=a[k++];
    14         }
    15     }
    16     for(int i=0;i<3;i++)
    17     {
    18         for(int j=0;j<=i;j++)
    19         {
    20             if(b[i][j]>=b[i+1][j]||b[i][j]>=b[i+1][j+1])
    21             {
    22                     return 0;
    23 
    24             }
    25         }
    26     }
    27         return 1;
    28 }
    29 int main()
    30 {
    31     
    32     int sum=0;
    33     for(int i=0;i<10*9*8*7*6*5*4*3*2;i++)
    34     {
    35         if(is())
    36         sum++;
    37         next_permutation(a,a+10);
    38     }
    39     cout<<sum;
    40     return 0;
    41 }
  • 相关阅读:
    面试题汇总
    桥接模式
    2010412 面试题
    2010412 面试题1
    访问者模式
    原码、反码、补码什么意思?有什么用?
    装饰模式
    mysql 忘记root密码 进行重置
    运维开源工具一览
    编写一个函数计算小费,小费为总账单的20%
  • 原文地址:https://www.cnblogs.com/jweie/p/8366353.html
Copyright © 2020-2023  润新知