前言:hello各位童学们好呀!许久不见!本文为本人的蓝桥杯OJ的刷题笔记!文章隶属于专栏蓝桥杯,该专栏的目的是为了记录自己的刷题记录和学习过程,激励自己不断前行,为明年的ACM、ICPC、蓝桥杯等比赛做足准备,也希望可以帮助到一些同样在刷题道路上的小伙伴们!!!!
1、单词分析
题目描述
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。
输入描述
输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过 1000。
输出描述
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
输入输出样例
示例 1
输入
lanqiao
copy
输出
a
2
copy
示例 2
输入
longlonglongistoolong
copy
输出
o
6
AC代码:
#include<bits/stdc++.h> using namespace std; int main() { string s; int max=0,a[26]={0}; char c; cin>>s; for(int i=0;i<s.length();i++) { a[s[i]-'a']++; } for(int i=0;i<26;i++) { if(a[i]>max) { max=a[i]; c=i+'a'; } } cout<<c<<endl; cout<<max<<endl; return 0; }
2、成绩统计
题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。
输入描述
输入的第一行包含一个整数
n (1≤n≤10 4 ),表示考试人数。
接下来
n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。
输入输出样例
示例
输入
7
80
92
56
74
88
100
0
copy
输出
71%
43%
AC代码:
#include<bits/stdc++.h> using namespace std; int main() { int n; int grade; int sum1=0,sum2=0; cin>>n; for(int i=0;i<n;i++) { cin>>grade; if(grade>=60) { sum1+=1; } if(grade>=85) { sum2+=1; } } sum1=sum1*100.0/n*1.0+0.5; sum2=sum2*100.0/n*1.0+0.5; printf("%d%%\n%d%%",sum1,sum2); }
3、最短路
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如下图所示,
G 是一个无向图,其中蓝色边的长度是 1橘色边的长度是 2绿色边的长度是3.
则从 A 到 S 的最短距离是多少?
AC代码:
#include <iostream> using namespace std; int main() { printf("6"); return 0; }
4、门牌制作
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝要为一条街的住户制作门牌号。
这条街一共有
2020
2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作
0 到
9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符
1、0、1、7,即需要
1 个字符 0,2 个字符 1,1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
AC代码:
#include<bits/stdc++.h> using namespace std; int main() { int count=0; int t; for(int i=1;i<=2020;i++) { t=i; while(t) { if(t%10==2) { count++; } t/=10; } } cout<<count; }
5、卡片
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。
小蓝准备用这些卡片来拼一些数,他想从
1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从 1 拼到多少。
例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10,
但是拼
11
11 时卡片
1
1 已经只有一张了,不够拼出
11
11。
现在小蓝手里有
0
0 到
9
9 的卡片各
2021
2021 张,共
20210
20210 张,请问小蓝可以从
1
1 拼到多少?
提示:建议使用计算机编程解决问题。
AC代码:
#include<bits/stdc++.h> using namespace std; int main() { int num[10]; for(int i=0;i<10;i++) { num[i]=2021; } for(int i=1;;i++) { int x=i; while(x) { if(num[x%10]==0) { cout<<i-1; return 0; } num[x%10]--; x/=10; } } return 0; }
6、数字三角形
题目描述
上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。
路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。
输入描述
输入的第一行包含一个整数
N (1≤N≤100),表示三角形的行数。
下面的 N 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。
输出描述
输出一个整数,表示答案。
输入输出样例
示例
输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
copy
输出
27
AC代码:
#include<bits/stdc++.h> using namespace std; int main() { int e[101][101]; int n; cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) { cin>>e[i][j]; } } for(int i=2;i<=n;i++) { for(int j=1;j<=i;j++) { e[i][j]+=max(e[i-1][j],e[i-1][j-1]); } } if(n%2 == 0) { cout << max(e[n][n/2],e[n][n/2+1]); } else { cout << e[n][n/2+1]; } }
7、成绩分析
题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
请计算这次考试的最高分、最低分和平均分。
输入描述
输入的第一行包含一个整数
n (1≤n≤10 4 ),表示考试人数。
接下来
n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出三行。
第一行包含一个整数,表示最高分。
第二行包含一个整数,表示最低分。
第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。
输入输出样例
示例
输入
7
80
92
56
74
88
99
10
copy
输出
99
10
71.29
AC代码:
#include<bits/stdc++.h> using namespace std; int main() { int n; int max=0,min=100; double aver; int grade; cin>>n; for(int i=1;i<=n;i++) { cin>>grade; aver+=grade; if(grade>max) { max=grade; } if(grade<min) { min=grade; } } cout<<max<<endl<<min<<endl; printf("%.2lf",aver/n); }
8、购物单
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。
这不,大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。
小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。
现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。
取款机只能提供
100
100 元面额的纸币。小明想尽可能少取些现金,够用就行了。 你的任务是计算出,小明最少需要取多少现金。
以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。
**** 180.90 88折
**** 10.25 65折
**** 56.14 9折
**** 104.65 9折
**** 100.30 88折
**** 297.15 半价
**** 26.75 65折
**** 130.62 半价
**** 240.28 58折
**** 270.62 8折
**** 115.87 88折
**** 247.34 95折
**** 73.21 9折
**** 101.00 半价
**** 79.54 半价
**** 278.44 7折
**** 199.26 半价
**** 12.97 9折
**** 166.30 78折
**** 125.50 58折
**** 84.98 9折
**** 113.35 68折
**** 166.57 半价
**** 42.56 9折
**** 81.90 95折
**** 131.78 8折
**** 255.89 78折
**** 109.17 9折
**** 146.69 68折
**** 139.33 65折
**** 141.16 78折
**** 154.74 8折
**** 59.42 8折
**** 85.44 68折
**** 293.70 88折
**** 261.79 65折
**** 11.30 88折
**** 268.27 58折
**** 128.29 88折
**** 251.03 8折
**** 208.39 75折
**** 128.88 75折
**** 62.06 9折
**** 225.87 75折
**** 12.89 75折
**** 34.28 75折
**** 62.16 58折
**** 129.12 半价
**** 218.37 半价
**** 289.69 8折
copy
需要说明的是,
88 折指的是按标价的
88 计算,而
8 折是按
80 计算,余者类推。 特别地,半价是按
50 计算。
请输出小明要从取款机上提取的金额,单位是元。
AC代码:
#include <iostream> using namespace std; int main() { cout<<5200; return 0; }
9、空间
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝准备用
256MB 的内存空间开一个数组,数组的每个元素都是
32 位 二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问
256MB 的空间可以存储多少个
32 位二进制整数?
AC代码:
#include <iostream> using namespace std; int main() { long long sum=256*1024*1024/4; cout<<sum; return 0; }