第十六届蓝桥杯 2025 C/C++组 旗帜

目录

题目:

题目描述:

题目链接:

思路:

思路详解:

代码:

代码详解:


题目:

题目描述:

题目链接:

P12340 [蓝桥杯 2025 省 AB/Python B 第二场] 旗帜 - 洛谷

思路:

思路详解:

定义cnt用于记录A的数量,显然一个完整的LANQIAO有两个A。我的思路是先判断每一行存在几个完整的LANQIAO(或者它的变式),举例来说,如果w=10,不管哪一行前7位就是完整的LANQIAO(或者它的变式),那么现在就有h*(w/7)*2。

然后再来计算每一行的不足完整LANQIAO的那一部分,第一层循环遍历每一行,i从1开始。第二次循环遍历不完整部分的每一个字母,定义LANQIAO为数组str,由题第一行从L开始(即数组索引0),第二行从A开始(即数组索引1),每行向左移动一个字符。可以发现每次开始的数组索引=行数i-1,不完整部分的字母个数为w%7,所以遍历的循环条件可以写为for(int j=i-1;j<i-1+w%7;j++)。但是不难发现这样会发生访问越界的情况,比如我们现在要访问索引为7(按照我们的逻辑应该访问的是L),但是数组str的最大索引为6(一共7个字母),所以为了防止访问越界,我们可以改为j%7

代码:

代码详解:

复制代码
#include<bits/stdc++.h>
using namespace std;

int main()
{
	int cnt=0;
	string str="LANQIAO";
	int h,w;
	cin>>h>>w;
	cnt+=h*(w/7)*2;  //每一行*完整的LANQIAO个数*完整的LANQIAO有两个A 
	for(int i=1;i<=h;i++)  //遍历每一行 
	{
		for(int j=i-1;j<i-1+w%7;j++) //访问不完整部分的每一个字母 
		{
			if(str[j%7]=='A') //防止访问越界 
			{
				cnt++;
			}
		}
	}
	cout<<cnt<<endl;
	return 0;
}
相关推荐
老赵的博客13 小时前
c++ 杂记
开发语言·c++
jimmy.hua13 小时前
[C++刷怪笼]:set/map--优质且易操作的容器
开发语言·c++
tan180°13 小时前
Boost搜索引擎 网络库与前端(4)
linux·网络·c++·搜索引擎
bkspiderx13 小时前
C++经典的数据结构与算法之经典算法思想:贪心算法(Greedy)
数据结构·c++·算法·贪心算法
郝学胜-神的一滴14 小时前
避免使用非const全局变量:C++中的最佳实践 (C++ Core Guidelines)
开发语言·c++·程序人生
l1t14 小时前
轻量级XML读写库Mini-XML的编译和使用
xml·c语言·解析器
晚云与城16 小时前
今日分享:C++ Stack和queue(栈与队列)
开发语言·c++
小莞尔16 小时前
【51单片机】【protues仿真】基于51单片机停车场的车位管理系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
bikong716 小时前
一种高效绘制余晖波形的方法Qt/C++
数据库·c++·qt
xianyinsuifeng17 小时前
Oracle 10g → Oracle 19c 升级后问题解决方案(Pro*C 项目)
c语言·数据库·oracle