蓝桥杯省赛真题C++B组-裁纸刀2022

一、题目

问题描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝有一个裁纸刀,每次可以将一张纸沿一条直线裁成两半。

小蓝用一张纸打印出两行三列共 6 个二维码,至少使用九次裁出来,下

图给出了一种裁法。

在上面的例子中,小蓝的打印机没办法打印到边缘,所以边缘至少要裁 4 次。另外,小蓝每次只能裁一张纸,不能重叠或者拼起来裁。

如果小蓝要用一张纸打印出 20 行 22 列共 440 个二维码,他至少需要裁多少次?

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

二、思路

方法一:(错误不要看了)

我的理解是一张纸只能裁剪出6个二维码,而且一张纸需要裁9次,现在有440个二维码,我们就需要看440个二维码能裁处几个整张的二维码,是否有剩下的二维码个数,有的话再看是需要裁剪几刀。440/6=73......2,最后还剩两个二维码的话,四个边需要裁四个边,还有再裁一刀分成两个二维码。73*9+4+1=662。

方法二:

想用代码的方式解决,但是看题解后,我才发现题目中的裁剪原则:四个边四刀,因为题目说了公用了9刀,所以是用了5刀裁出的。

题目问的是20 行 22 列共 440 个二维码,他至少需要裁多少次?图上的是2行3列6个二维码用了5刀(除过边),2行用了1刀,3列用了4刀(想想现实生活当中也是如此,假如先横着来一刀,剪开后的两半我们再分别去剪),类比,20行用了19刀,22列用20*(22-1)刀。

19+20*(22-1)+4=443

方法三:

找规律:

|-------|-----------|
| 二维码个数 | 裁的次数 |
| 1 | 4+0 |
| 2 | 4+1 |
| 4 | 4+3 |
| 6 | 4+5 |
| ... | ... |
| 440 | 4+(440-1) |

三、代码

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    cout << 19 + 20 * (22 - 1) + 4 << endl;
    return 0;
}

四、反思

没有好好理解题,按照我那个错误的思路,6个二维码最终是裁7刀,人家题目是裁9刀

也没有好好找规律

相关推荐
晴天的雨.9927 小时前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
aramae14 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
荆棘鸟智能15 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
INGNIGHT19 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_8390805419 小时前
C++常见八股
数据结构·c++·算法
青山是哪个青山19 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
mikuyyds19 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
a1879272183120 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历
syagain_zsx20 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_3077791320 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab