2017第八届蓝桥杯决赛题目解析(1):36进制
问题描述:
对于16进制,我们使用字母A-F来表示10及以上的数字。如法炮制,一直用到字母Z,就可以表示36进制。36进制中,A表示10,Z表示35,AA表示370。你能算出MANY表示的数字用10进制表示是多少吗?请提交一个整数,不要填写任何多余的内容(比如:说明文字)
问题分析:
作为蓝桥杯一贯的风格,省赛时候就有各种水题,国赛也不例外,这种题目甚至不需要编程解决,用excel,windows自带的计算器等工具,一般都能解决。
但为了表述问题解决策略,还是贴出代码以供参考。
问题答案:
1040254
代码:
1 | #include <iostream> |
2017第八届蓝桥杯决赛题目解析(2):瓷砖样式
问题描述:
小明家的一面装饰墙原来是3*10的小方格。现在手头有一批刚好能盖住2个小方格的长方形瓷砖。
瓷砖只有两种颜色:黄色和橙色。小明想知道,对于这么简陋的原料,可以贴出多少种不同的花样来。
小明有个小小的强迫症:忍受不了任何2*2的小格子是同一种颜色。
(瓷砖不能切割,不能重叠,也不能只铺一部分。另外,只考虑图案,请忽略瓷砖的拼接)
显然,对于2*3的小格子来说,口算都可以知道:一共10中贴法,如图所示:
但对于3*10的格子呢?肯定是个不小的数目,请你利用计算机的威力算出该数字。
注意:你需要提交的是一个整数,不要填写任何多余的内容(比如:说明性文字)
问题分析:
题目说的很长,但中心思想一句话就可以概括:用2种 2*1 瓷砖,覆盖 10*3 的墙面,保证没有 2*2 颜色相同,请问有多少种情况?
考场上初步想来,直接暴力搜索所有解,最后对所有解进行判定合,足够秒出结果。而且代码简单,不会花费过多时间,为后面大分题准备。
现在想来,其实不必对所有解进行判合法,在中途选择瓷砖时,就可以进行判定,这样可以降低时间复杂度。
问题答案:
114434
代码:
1 | #include <iostream> |
2017第八届蓝桥杯决赛题目解析(3):希尔伯特曲线
问题描述:
希尔伯特曲线是以下一系列分形曲线 \(H_{n}\) 的极限。我们可以把 \(H_n\) 看作一条覆盖$2^n × 2^n $方格矩阵的曲线,曲线上一共有 \(2^n \cdot 2^n\)个顶点(包括左下角起点和右下角终点),恰好覆盖每个方格一次。
\(H_n(n > 1)\)可以通过如下方法构造:
- 将 \(H_n-1\)顺时针旋转90度放在左下角
- 将 \(H_n-1\)逆时针旋转90度放在右下角
- 将2个$ H_n-1$ 分别放在左上角和右上角
- 用3条单位线段把4部分连接起来对于 \(H_n\) 上每一个顶点 \(p\) ,我们定义 \(p\) 的坐标是它覆盖的小方格在矩阵中的坐标(左下角是 \((1, 1)\),右上角是 \((2^n, 2^n)\) ,从左到右是X轴正方向,从下到上是Y轴正方向),定义 \(p\)的序号是它在曲线上从起点开始数第几个顶点(从1开始计数)。
以下程序对于给定的 \(n(n <= 30)\) 和 \(p\) 点坐标 \((x, y)\) ,输出 \(p\) 点的序号。请仔细阅读分析源码,填写划线部分缺失的内容。
1 | #include <stdio.h> |
问题分析:
这题题目表述很多,但其实没有么有想象中那么难,规律性极强,主要一个坑点是入曲线的方向问题,一开始以为是从左边进入(答案y),后来验证出错,正确应该是从右边进入。
答案:
m-y+1