做排行榜的网站知乎,长沙服务好的网络营销,网站宽度980 在ipad上 左对齐了,网站广告位代码前言#xff1a; 第一次做蓝桥模拟赛的博客记录#xff0c;可能有很多不足的地方#xff0c;现在将第十五届蓝桥杯模拟赛B组#xff08;第二期#xff09;的题目与代码与大家进行分享#xff0c;我是用C做的#xff0c;有好几道算法题当时自己做的也是一脸懵#xff0c… 前言 第一次做蓝桥模拟赛的博客记录可能有很多不足的地方现在将第十五届蓝桥杯模拟赛B组第二期的题目与代码与大家进行分享我是用C做的有好几道算法题当时自己做的也是一脸懵所以有好个别几道也是请教了其他大佬才分享出来的。 目录
编辑
一、试题A
二、试题B
三、试题C
四、试题D
五、试题E
六、试题F 七、试题G
八、试题H
九、试题 I
十、试题 J 一、试题A 问题描述 小蓝要在屏幕上放置一行文字每个字的宽度相同。 小蓝发现如果每个字的宽为 36 像素一行正好放下 30 个字字符之间和前后都没有任何 空隙。 请问如果每个字宽为 10 像素字符之间不包含空隙一行可以放下多少个字 没啥好说的这就是一个小学数学题36 ×30 / 10 108
答案108
二、试题B 问题描述 求 2^2023%1000即 2的2023次方除以1000的余数。 %1000就是要求 2^2023后三位因为只是一个填空题所有我们直接用计算器就可以求出来 答案608
三、试题C 问题描述 如果一个正整数转化成二进制与转换成八进制后所有数位的数字之和相等则称为数位和相等 的数。 前几个数位和相等的正整数为 1, 8, 9, 64, …… 请问第 23 个数位和相等的正整数是多少 可以使用暴力或者写程序的方法进行求解
#includebits/stdc.h#define num first
#define y secondusing namespace std;typedef long long ll;
typedef unsigned long long ULL;
typedef pairint,int PII;// 十进制数转换为任意n进制数
// num:十进制数,n:转换成n进制数string Itoa(int num,int n)
{string str;int rem;char ch;if(num 0)str 0;while(num 0) {rem num % n;ch (rem 10) ? (rem 0) : (rem - 10 A);str ch str;num / n;}return str;
}
// 计算每一位上的和
int sum(string str)
{int sum 0;for(int i 0;i str.length();i ) {sum str[i] - 0;}return sum;
}
string str1;
string str2;
int main()
{int cnt 0;int i 1;while(1) {str1 Itoa(i,2);str2 Itoa(i,8);// couti str1 str2endl;if(sum(str1) sum(str2)) {cnt ;cout 数字为 i endl;cout str1 endl;cout str2 endl;cout cnt的值是 cnt endl;}if(cnt 23) {cout 找到了!!!: i endl;cout str1 endl;cout str2 endl;break;}i ;}
return 0;
} 数字为1
1
1
cnt的值是1
数字为8
1000
10
cnt的值是2
数字为9
1001
11
cnt的值是3
数字为64
1000000
100
cnt的值是4
数字为65
1000001
101
cnt的值是5
数字为72
1001000
110
cnt的值是6
数字为73
1001001
111
cnt的值是7
数字为512
1000000000
1000
cnt的值是8
数字为513
1000000001
1001
cnt的值是9
数字为520
1000001000
1010
cnt的值是10
数字为521
1000001001
1011
cnt的值是11
数字为576
1001000000
1100
cnt的值是12
数字为577
1001000001
1101
cnt的值是13
数字为584
1001001000
1110
cnt的值是14
数字为585
1001001001
1111
cnt的值是15
数字为4096
1000000000000
10000
cnt的值是16
数字为4097
1000000000001
10001
cnt的值是17
数字为4104
1000000001000
10010
cnt的值是18
数字为4105
1000000001001
10011
cnt的值是19
数字为4160
1000001000000
10100
cnt的值是20
数字为4161
1000001000001
10101
cnt的值是21
数字为4168
1000001001000
10110
cnt的值是22
数字为4169
1000001001001
10111
cnt的值是23
找到了!!!:4169
1000001001001
10111答案 4169
四、试题D 问题描述 对于以下这些数6行每行6个共36个请问约数个数最多的是哪个如果有多个 请回答出现最早的那个 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 约数个数模版题
#includebits/stdc.husing namespace std;const int N 100010;int primes[N], cnt;
bool st[N];void init(int n)
{for (int i 2; i n; i ){if (!st[i]) primes[cnt ] i;for (int j 0; primes[j] * i n; j ){st[primes[j] * i] true;if (i % primes[j] 0) break;}}
}void divide(int x)
{int res 0;for (int i 0; i cnt; i ){int p primes[i];if (x % p 0){while (x % p 0){res ;{x / p;}}}}cout res endl;
}int main()
{init(N);int m 30;while (m--){int x;cin x;divide(x);}return 0;
}答案 901440
五、试题E 问题描述 小蓝有一个01矩阵。他打算将第一行第一列的 0 变为 2 。变化过程有传染性每次 2 的上下 左右四个相邻的位置中的 0 都会变成 2 。直到最后每个 2 的周围都是 1 或 2 结束。 请问最终矩阵中有多少个 2 以下是小蓝的矩阵共 30 行 40 列。 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 经典BFS(广度优先搜索)求联通块由题意可知要求所有0的联通块中0的个数
#includebits/stdc.h#define x first
#define y secondusing namespace std;typedef pairint, int PII;
const int N 45;
char g[N][N];
bool st[N][N];
int dx[4] {1, 0, -1, 0}, dy[4] {0, -1, 0, 1};
int ans;void bfs(int x, int y)
{queuePII q;st[x][y] true;q.push({x, y});ans;while (q.size()){auto t q.front();q.pop();for (int i 0; i 4; i){int a dx[i] t.x, b dy[i] t.y;if (a 0 || a 30 || b 0 || b 40) continue;if (st[a][b]) continue;if (g[a][b] ! 0) continue;ans;st[a][b] true;q.push({a, b});}}
}
int main()
{for (int i 0; i 30; i) cin g[i];bfs(0, 0);cout ans endl;return 0;
}答案541
六、试题F 问题描述 给定一个正好六位的正整数 x请将 x 循环左移一位后输出。 所谓循环左移一位是指将原来的十万位变为个位原来的万位到个位向左移动依次变为十万 位到十位。 例如194910 左移一位变为 949101 。 又如987123 左移一位变为 871239 。 输入格式 输入一行包含一个整数 x 。保证输入的 x 正好包含 6 个十进制数位而且十万位和万位上的数 字均不为 0 。 输出格式 输出一行包含一个整数表示答案。 样例输入 194910 样例输出 949101 直接字符串简单模拟即可,我只能说这道题就是一道经典送分题如果这都做不出来的话那就是真白学了
#include bits/stdc.husing namespace std;int main()
{string s;cin s;for(int i 1; i s.size(); i )cout s[i];cout s[1];return 0;
} 七、试题G 问题描述 输入一个仅包含小写英文字母的字符串请问这个字符串中的最后一元音是什么。 在英文中a, e, i, o, u 共 5 个字母是元音字母其它字母不是元音字母。 输入格式 输入一行包含一个字符串仅由小写英文字符组成字符串中至少包含一个元音字母 输出格式 输出一行包含一个字符表示答案。 样例输入 lanqiao 样例输出 o 样例输入 cup 样例输出 u 这道题应该和上一道题的难度不相上下吧就是一个简单的循环遍历字符串模拟从后往前输出第一个元音字母即可
#include bits/stdc.husing namespace std;int main()
{string s;cin s;for(int i s.size() - 1; i 0; i--){if(s[i] a || s[i] o || s[i] e || s[i] i || s[i] u){cout s[i] endl;break;}}return 0;
}
八、试题H 问题描述 给定一个整数对这个整数的一次转换是指将这个整数变为这个整数的所有数位上的非零数字的乘积。 例如对 123456789 进行一次转换变为 123456789362880再进行一次转换变为 362882304再进行一次转换变为 23424再进行一次转换变为 8。 给定一个整数请依次将转换过程中经历的每个整数输出直到小于 10 。 输入格式 输入一行包含一个整数 n 。 输出格式 输出多行每行包含一个整数。 样例输入 123456789 样例输出 362880 2304 24 8 评测用例规模与约定 对于 50% 的评测用例1 n 10^9 10的9次方。 对于所有评测用例1 n 10^18 10的18次方。 简单模拟即可
#include bits/stdc.husing namespace std;int main()
{long long int n;cin n;long long int sum 11; while(sum 10){sum 1;while(n){if((n % 10) ! 0)sum * n % 10;n / 10;}cout sum endl;n sum; }return 0;
}
九、试题 I 问题描述 小蓝站在一个 n 行 m 列的方格图中间方格图的每一个方格上都标有一个正整数。 如果两个相邻方格上下左右四个方向相邻内的数的最大公约数大于 1 则可以从其中一个 方格移动到另一个方格当然也可以从另一个方格移回第一个方格。 假设小蓝开始时站在第 r 行第 c 列请问小蓝可以移动到方格图内的多少个方格 输入格式 输入的第一行包含两个整数 n, m 用一个空格分隔表示方格图的行数和列数。 接下来 n 行每行包含 m 个正整数相邻整数间用一个空格分隔依次表示方格图中从第 1 行到第 n 行每行从第 1 列到第 m 列中的数。 接下来一行包含两个整数 r, c用一个空格分隔表示小蓝所在的行号和列号。 输出格式 输出一行包含一个整数表示答案。 样例输入 3 4 3 6 5 5 2 4 3 5 7 8 3 8 3 2 样例输出 5 评测用例规模与约定 对于50%的评测用例1 n, m 100方格图中的每个数不超过 10^5 10的5次方。 对于所有评测用例1 n, m 1000方格图中的每个数不超过 10^9 10的9次方。 BFS模版题就是加了求最大公约数的步骤
#includebits/stdc.h#define x first
#define y secondusing namespace std;
typedef pairint, int PII;
const int N 1010;
int g[N][N];
int n, m;
int dx[4] {1, 0, -1, 0}, dy[4] {0, -1, 0, 1};
int ans;
bool st[N][N];int gcd(int a, int b)
{return b ? gcd(b, a % b) : a;
}
void bfs(int x, int y)
{queuePII q;st[x][y] true;q.push({x, y});ans;while (q.size()){auto t q.front();q.pop();for (int i 0; i 4; i){int a dx[i] t.x, b dy[i] t.y;if (a 1 || a n || b 1 || b m) continue;if (st[a][b]) continue;if (gcd(g[a][b], g[t.x][t.y]) 1) continue;st[a][b] true;ans ;q.push({a, b});}}
}
int main()
{cin n m;for (int i 1; i n; i)for (int j 1; j m; j)cin g[i][j];int x, y;cin x y;bfs(x, y);cout ans endl;return 0;
}十、试题 J 问题描述 给定一个序列 a[1], a[2], …, a[n] 和一个整数 k请找出一个长度正好为 k 的区间使得区间中 所有数的和最大。 即要找到一个整数 p 使得 1 p 且 pk-1 n 使得 a[p]a[p1]...a[pk-1] 最大。 输入格式 输入的第一行包含两个整数 n , k。 第二行包含 n 个整数相邻的整数之间使用一个空格分隔表示给定的序列。 输出格式 输出一行包含一个整数表示最大的区间和你只需要输出和就行不需要输出方案。 样例输入 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。 这个就是一个简单的滑动窗口前缀和模版题有一点需要注意那就是开long long要不然会超出范围
#include bits/stdc.husing namespace std;int main()
{int n,k;cin n k;long long int s[100000];for(int i 1; i n; i ){cin s[i];s[i] s[i - 1];}long long int m;for(int i 1; i k - 1 n; i ){m max(s[i k - 1] - s[i - 1],m);}cout m endl;return 0;
}