第十五届蓝桥杯C++组二期模拟赛

203 阅读8分钟

一 .放像素

image.png

image.png

二 .求余数

image.png

因为2^2023太大了,如果求完全部次方再去取模这个这个值是非常大的。

我们这里可以用数学公式,就是边次方边取模,直到2023次方乘完,也就得到结果了:

image.png

三 .数位和相等

image.png

image.png

  • 答案: 4169

四 .约数个数

image.png

数据:

  393353 901440 123481 850930 423154 240461
 373746 232926 396677 486579 744860 468782
 941389 777714 992588 343292 385198 876426
 483857 241899 544851 647930 772403 109929
 882745 372491 877710 340000 659788 658675
 296521 491295 609764 718967 842000 670302

思想

如果我们想求一个数x有多少个因子,只需要把x放到一个循环里,循环i从1开始,到x的一半结束即可。

循环体:让x去%i,余数t为0,那t就是x的一个因子,计数器++。

image.png 上面的图写错了,是求最大因子个数不是最大因子。

现在我们要输入6*6个数据,那我们就从文件里读取数据即可:

image.png image.png

4).总结
  • 答案: 901440

五.灌水

image.png

0000100010000001101010101001001100000011
0101111001111101110111100000101010011111
1000010000011101010110000000001011010100
0110101010110000000101100100000101001001
0000011010100000111111001101100010101001
0110000110000000110100000000010010100011
0100110010000110000000100010000101110000
0010011010100110001111001101100110100010
1111000111101000001110010001001011101101
0011110100011000000001101001101110100001
0000000101011000010011111001010011011100
0000100000011001000100101000111011101100
0010110000001000001010100011000010100011
0110110000100011011010011010001101011011
0000100100000001010000101100000000000010
0011001000001000000010011001100101000110
1110101000011000000100011001001100111010
0000100100111000001101001000001010010001
0100010010000110100001100000110111110101
1000001001100010011001111101011001110001
0000000010100101000000111100110010101101
0010110101001100000100000010000010110011
0000011101001001000111011000100111010100
0010001100100000011000101011000000010101
1001111010010110011010101110000000101110
0110011101000010100001000101001001100010
1101000000010010011001000100110010000101
1001100010100010000100000101111111111100
1001011010101100001000000011000110110000
0011000100011000010111101000101110110001

这道题我们可以通过dfs去搜索上下左右四个位置,如果这些位置的值为0,就把0变为2

我们可以通过偏移量的方式来表示上下左右四个方向:

image.png

image.png

image.png

  • 答案:586

六.左移一位

题目描述:

给定一个正好六位的正整数 x,请将 x 循环左移一位后输出:

image.png 这道题用c的格式会更好看一些:

image.png

image.png

7-最大落差

image.png

分析:

我们维护一个最大落差:

image.png

八.最后的元音

题目:给定一个字符串,输出该字符串中最后一个元音字符

image.png

思想

(1)我们可以维护一个变量res,用来存放最后一个元音字符

(2)遍历该数组,如果发现字符是元音字符就先记录一下,赋值给res。然后继续向后查找,再次找到一个元音字符就覆盖res,直到遍历到数组结尾,那么res肯定就是该数组中出现的最后一个元音字符。

image.png

九.拆位乘积

给定一个数,把这个数的每一位进行累乘,累乘的和如果小于10就继续拆位累乘,直到累成和小于10为止。

样例输入
123456789
样例输出 
362880 
2304  
24  
8

image.png

10.公约移动

image.png

数据

输出格式

  输出一行包含一个整数,表示答案。
  
样例输入

3 4

3 6 5 5

2 4 3 5

7 8 3 8

3 2

样例输出

5

评测用例规模与约定

  对于50%的评测用例,1 <= n, m <= 100,方格图中的每个数不超过 10**5105次方)。
  
  对于所有评测用例,1 <= n, m <= 1000,方格图中的每个数不超过 10**9109次方)。
  


思想

image.png

这道题我们可以分为两个部分,一个是主体:也就是我们的 dfs暴搜部分,另一部分是求公约数部分。

刚开始我是这样写的,蹦了:

image.png

image.png

其实是因为定义了a ,vis数组,但是却没有开辟空间导致的:

image.png

十一. 最大区间和

image.png 数据

样例输入
6 3
2 3 9 1 9 5
样例输出
19

范围

评测用例规模与约定
  对于 30% 的评测用例,1 <= k <= n <= 301 <= a[i] <= 100。
  对于 60% 的评测用例,1 <= k <= n <= 10001 <= a[i] <= 10000。
  对于所有评测用例,1 <= k <= n <= 1000001 <= a[i] <= 1000000

这道题上来我会先想到枚举起点,然后维护一个区间最大和。

枚举起点:

就用给的样例,可以枚举的起点和K有关系:

image.png 根据图我们发现可以枚举的起点有: 2 3 9 1

这个范围可以表示为(i,i+k)。

因此我们可以写如下代码:

image.png

我们发现这个结果并不对,这是因为temp没有被重置的原因,每枚举一个新的起点的时候,temp都应该被重置,所以temp应该放到循环内部。

image.png

这个解法的时间复杂度为O(nk)。如果我们用前缀和的话时间复杂度可以达到O(n),直接少了k倍。

前缀和解法

image.png

image.png