2017第八届蓝桥杯决赛(C++ B组)2.磁砖样式

磁砖样式

小明家的一面装饰墙原来是 310 的小方格。 现在手头有一批刚好能盖住2个小方格的长方形瓷砖。 瓷砖只有两种颜色:黄色和橙色。 小明想知道,对于这么简陋的原料,可以贴出多少种不同的花样来。 小明有个小小的强迫症:忍受不了任何22的小格子是同一种颜色。 (瓷砖不能切割,不能重叠,也不能只铺一部分。另外,只考虑组合图案,请忽略瓷砖的拼缝) 显然,对于 23 个小格子来说,口算都可以知道:一共10种贴法,如【p1.png所示】 但对于 310 的格子呢?肯定是个不小的数目,请你利用计算机的威力算出该数字。 注意:你需要提交的是一个整数,不要填写任何多余的内容(比如:说明性文字)

解题思路

暴力枚举解答树,然后判断该解是否可行

源码

#include <iostream>
int cnt = 0;

#define COLOR_ORANGE 1
#define COLOR_YELLOW 2

int cell[3][10]{ 0 };

bool isOK() {
    for (int x = 1; x < 3; x++) {
        for (int y = 1; y < 10; y++) {
            if (cell[x - 1][y - 1] == cell[x][y]&& cell[x][y] == cell[x - 1][y]&& cell[x][y] == cell[x][y - 1]) {
                return false;
            }
        }
    }
    
    return true;
}

 void fill(int x, int y) {
    if (x == 3) {
        if (isOK()) {
            cnt++;
            /*std::cout << "-------------------\n";
            for (int i = 0; i < 3; i++) {
                for (int k = 0; k < 10; k++) {
                    std::cout << cell[i][k] << " ";
                }
                std::cout << "\n";
            }*/
        }
        return;
    }
    for (int p = 1; p <= 2; p++) {
        if (y + 1 < 10 && cell[x][y] == 0 && cell[x][y + 1] == 0) {
            cell[x][y] = p;
            cell[x][y + 1] = p;
            if (y == 8) {
                fill(x + 1, 0);
            }
            else {
                fill(x, y + 2);
            }
            cell[x][y] = 0;
            cell[x][y + 1] = 0;
        }
            
        if (x + 1 <= 3 && cell[x][y] == 0 && cell[x + 1][y] == 0) {
            cell[x][y] = p;
            cell[x + 1][y] = p;
            if (y == 9) {
                fill(x + 1, 0);
            }
            else {
                fill(x, y + 1);
            }
            cell[x][y] = 0;
            cell[x + 1][y] = 0;
        }
    }
}

int main(){
    fill(0, 0);
    std::cout << cnt;
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯Bugly的专栏

Android自绘动画实现与优化实战——以Tencent OS录音机波形动画为实例

前言 我们所熟知的,Android 的图形绘制主要是基于 View 这个类实现。 每个 View 的绘制都需要经过 onMeasure、onLayout、onD...

44440
来自专栏华章科技

升值加薪Excel神助攻,数据透视表堪称神器!

VLOOKUP、数据透视表、条件格式…你用这几个技巧做,80%的工作需求都能解决。今天特意整理了这些操作技巧,拯救同在“表海”中挣扎的你,让你的工作效率超乎想...

11220
来自专栏章鱼的慢慢技术路

通过C#脚本实现旋转的立方体

24440
来自专栏前端杂货铺

使用canvas截图或者改变灰度

简述 html5新添加的canvas API可以让我们对画布进行开发应用,典型的是可以使用canvas截图或者 手工绘制“迷你图”(即嵌入在文本中的高清小图片)...

37080
来自专栏转载gongluck的CSDN博客

FFmpeg菜鸡互啄#第4篇#音频解码

解码过程 音频解码跟上一篇的视频解码过程是一样的:打开输入文件,查找音频流,打开解码器,循环读帧解码帧,关闭解码器,关闭输入文件。 Code #define _...

36860
来自专栏Snova云数仓

Snova云数仓COS使用经验

Snova云数仓支持直接分析或者导入腾讯对象存储COS里的数据,本文列举了在使用COS场景下的一些技巧和注意事项。

8.2K60
来自专栏十月梦想

CSS3动画animation

        animation和上次说的transform动画有点不同,需要进行定义动画规则,而animation则无需受体,自动执行动画,translat...

10730
来自专栏Coding迪斯尼

VUE+WebPack前端游戏设计:能量气泡的螺旋升腾特效

20430
来自专栏iOS技术

iOS 无侵入实现段落样式控制(解决富文本单行显示中文问题)

在iOS开发中,文本格式(富文本)处理是一个比较麻烦的问题(我们姑且说它是麻烦的)。这里我提两点比较蛋疼的地方:

30040
来自专栏tkokof 的技术,小趣及杂念

HGE系列之三 渐入佳境

前两次“乱七八糟”的讲述了一些HGE的基础知识,不知看过的朋友有何感想,反正我自己都觉着有些不知所谓(!),但本着坚持到底的原则,今天继续献上拙文一篇,如果有朋...

9720

扫码关注云+社区

领取腾讯云代金券