第十四届蓝桥杯软件类 1 期模拟赛填空题及题解

蓝桥杯还剩仅仅10天,但是本人现在才开始准备啊!!!不过事已至此只好刷一点题练练手感了,系统地去学算法肯定是来不及啦。

题目来源:第十四届蓝桥杯软件类 1 期模拟赛(大学组)填空题3,4,5

填空3:项数

【问题描述】

小蓝特别喜欢调和级数 S(n) = 1/1 + 1/2 + 1/3 + 1/4 +…+ 1/n 。

请问,n 至少为多大时,S(n) > 12 ?

【运行限制】

最大运行时间:1s

最大运行内存: 256M

【解析】

第一题要求调和级数,本来想通分用分子除以分母来计算S(n),但是发现这样会超时,心想填空题不会在精度上做文章吧,那就用double直接算试试,答案就出来了。

#include
using namespace std;
int main(){double S=0;int i=1;for(i=1;S<=12.0;i++){S+=1.0/i;}cout<

填空4:山谷 

【问题描述】

给定一个字母矩阵,如果矩阵中的某个位置不在四条边上,而且该位置上的字母小于其上下左右四个位置的字母,则称为一个山谷。

例如,对于如下矩阵

DDDDD
CADCE
FFFFA

共有两个山谷,位于第二行第二列和第四列。请注意第二行第三列和第三行第五列都不是山谷。

对于如下 30 行 60 列的字母矩阵,请问有多少个山谷?

PHQGHUMEAYLNLFDXFIRCVSCXGGBWKFNQDUXWFNFOZVSRTKJPREPGGXRPNRVY
STMWCYSYYCQPEVIKEFFMZNIMKKASVWSRENZKYCXFXTLSGYPSFADPOOEFXZBC
OEJUVPVABOYGPOEYLFPBNPLJVRVIPYAMYEHWQNQRQPMXUJJLOOVAOWUXWHMS
NCBXCOKSFZKVATXDKNLYJYHFIXJSWNKKUFNUXXZRZBMNMGQOOKETLYHNKOAU
GZQRCDDIUTEIOJWAYYZPVSCMPSAJLFVGUBFAAOVLZYLNTRKDCPWSRTESJWHD
IZCOBZCNFWLQIJTVDWVXHRCBLDVGYLWGBUSBMBORXTLHCSMPXOHGMGNKEUFD
XOTOGBGXPEYANFETCUKEPZSHKLJUGGGEKJDQZJENPEVQGXIEPJSRDZJAZUJL
LCHHBFQMKIMWZOBIWYBXDUUNFSKSRSRTEKMQDCYZJEEUHMSRQCOZIJIPFION
EEDDPSZRNAVYMMTATBDZQSOEMUVNPPPSUACBAZUXMHECTHLEGRPUNKDMBPPW
EQTGJOPARMOWZDQYOXYTJBBHAWDYDCPRJBXPHOOHPKWQYUHRQZHNBNFUVQNQ
QLRZJPXIOGVLIEXDZUZOSRKRUSVOJBRZMWZPOWKJILEFRAAMDIGPNPUUHGXP
QNJWJMWAXXMNSNHHLQQRZUDLTFZOTCJTNZXUGLSDSMZCNOCKVFAJFRMXOTHO
WKBJZWUCWLJFRIMPMYHCHZRIWKBARXBGFCBCEYHJUGIXWTBVTREHBBCPXIFB
XVFBCGKCFQCKCOTZGKUBMJRMBSZTSSHFROEFWSJRXJHGUZYUPZWWEIQURPIX
IQFLDUUVEOOWQCUDHNEFNJHAIMUCZFSKUIDUBURISWTBRECUYKABFCVKDZEZ
TOIDUKUHJZEFCZZZBFKQDPQZIKFOBUCDHTHXDJGKJELRLPAXAMCEROSWITDP
TPCCLIFKELJYTIHRCQAYBNEFXNXVGZEDYYHNGYCDRUDMPHMECKOTRWOSPOFG
HFOZQVLQFXWWKMFXDYYGMDCASZSGOVSODKJGHCWMBMXRMHUYFYQGAJQKCKLZ
NAYXQKQOYZWMYUBZAZCPKHKTKYDZIVCUYPURFMBISGEKYRGZVXDHPOAMVAFY
RARXSVKHTQDIHERSIGBHZJZUJXMMYSPNARAEWKEGJCCVHHRJVBJTSQDJOOTG
PKNFPFYCGFIEOWQRWWWPZSQMETOGEPSPXNVJIUPALYYNMKMNUVKLHSECDWRA
CGFMZKGIPDFODKJMJQWIQPUOQHIMVFVUZWYVIJGFULLKJDUHSJAFBTLKMFQR
MYJFJNHHSSQCTYDTEAMDCJBPRHTNEGYIWXGCJWLGRSMEAEARWTVJSJBAOIOJ
LWHYPNVRUIHOSWKIFYGTYDHACWYHSGEWZMTGONZLTJHGAUHNIHREQGJFWKJS
MTPJHAEFQZAAULDRCHJCCDYRFVVRIVUYEEGFIVDRCYGURQDREDAKUBNFGUPR
OQYLOBCWQXKZMAUSJGMHCMHGDNMPHNQKAMHURKTRFFACLVGRZKKLDACLLTEO
JOMONXRQYJZGINRNNZWACXXAEDRWUDXZRFUSEWJTBOXVYNFHKSTCENAUMNDD
XFDMVZCAUTDCCKXAAYDZSXTTOBBGQNGVVPJGOJOGLMKXGBFCPYPCKQCHBDDZ
WRXBZMQRLXVOBTWHXGINFGFRCCLMZNMJUGWWBSQFCIHUBSJOLLMSQSGHMCPH
ELSOTFLBGSFNPCUZSRUPCHYNVZHCPQUGRIWNIQXDFJPWPXFBLKPNPEELFJMT

【运行限制】

最大运行时间:1s

最大运行内存: 256M

【解析】

 初看第二题有点懵,这啥意思!?

 经过冷静仔细的分析发现只是看上去吓人罢了,题目的意思就是让你找出一个矩阵中满足比他上下左右四个字母都要小的条件的所有字母,可以用字符串数组存储矩阵,然后遍历这个二维字符数组,满足strs[j][z]

#include
using namespace std;
int main(){string strs[30];int res=0;for(int i=0;i<30;i++){cin>>strs[i];}for(int j=1;j<29;j++){for(int z=1;z<59;z++){if(strs[j][z]

填空5:矩阵拆分

【问题描述】

小蓝有一个 100 行 100列的矩阵,矩阵的左上角为 1。其它每个位置正好比其左边的数大 2,比其上边的数大 1 。

例如,第 1 行第 2 列为 3 ,第 2 行第 2 列 为 4,第 10 行第 20 列为 48。

小蓝想在矩阵中找到一个由连续的若干行、连续的若干列组成的子矩阵,使得其和为 2022,请问这个子矩阵中至少包含多少个元素(即子矩阵的行数和列数的乘积)。

【运行限制】

最大运行时间:1s

最大运行内存: 256M

【解析】

这一题一开始的想法是暴力用四个循环遍历所有子矩阵求解,但是不出意料地超时了,上网一搜了解到二维前缀和算法,是一个基础算法(呜呜呜,都怪没有提前学习算法,现在再去系统地学习算法肯定是来不及辽,只好刷到多少算多少咯)。

首先学习一维前缀和算法,前缀和算法的本质就是就是计算前i个数组元素的和,这样我们计算数组中某一段连续区间的和时就不需要每次都遍历一下数组了,直接用前缀和数组中的和相减即可。比如要计算原数组第i个元素到第j个元素之和,只需要拿前缀和数组s[j](前j个元素之和)- s[i-1](前i-1个元素之和)即a[i]到a[j]的和(假设数组下标从1开始)。

再上升到二维数组中(下标从[1][1]开始,为了避免越位),s[i][j]即求以坐标为[i][j]和[1][1]为顶点所组成矩阵中所有元素之和,这要怎么求呢,这里推荐一个大佬写的文章讲得十分清楚,也解释了为什么前缀和数组和原数组的下标要从1开始-------------传送门。

#include 
using namespace std;
#define n 101
int main()
{//表示出矩阵int array[n][n];for(int i=1;i2022){break;}}}}}cout<


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章