赞
踩
目录
大家好,这一篇题解主要是关于2020那届蓝桥杯的题解。
黑心商家在网上出售糖果,根据糖果的重量额外计算邮费,计算规则:重量在 1000 克以内(包含 1000 克),邮费 8 元。超过 1000 克的部分,每 500 克加收超重费 4 元,不足 500 克部分按 500 克计算。现在我们知道每 100 克糖果 12元(限定只能购买 100 克的倍数)请你计算出顾客想要吃到糖果共需要的花费(糖果费用和邮费的总和)
输入描述:输入一行,包含一个整数,表示糖果的重量,单位克
输出描述:输出一行,包含一个整数,表示糖果的总花费
1200
156
这一篇文章比较简单,分类讨论是一种方法,也可以简化。
- #include<iostream>//调用输入输出流头文件
- #include<cmath>//调用数学头文件
- using namespace std;//使用标准名字空间
- int main(){//主函数开始
- int w,ans;//定义整数类型变量w
- cin>>w;//输入w的值
- if(w<=1000){//如果w小于等于1000
- ans=w/100*12+8;//将ans赋值为w/100*12+8
- }else{//否则
- ans=w/100*12+8+ceil((w-1000)/500.0)*4;//将ans赋值为w/100*12+8+ceil((w-1000)/500.0)
- }
- cout<<ans<<endl;//输出ans的值并换行
- return 0;//主函数结束,返回0
- }
- #include<cstdio>//调用C语言输入输出头文件
- #include<algorithm>//调用算法头文件
- #include<cmath>//调用数学函数头文件
- using namespace std;//使用标准名字空间
- int wg,ct;//定义整数类型变量wg
- int main(){//主函数开始
- scanf("%d",&wg);//输入wq的值
- ct=(wg*12)/100+8+ceil(max(wg-1000,0)/500.0)*4;//将ct赋值为......
- printf("%d",ct);//格式化输出ct的值
- return 0;//主函数结束,返回0
- }
皮皮的猫咪又一次越狱了,目标是远处的冰激凌商店,由于猫咪之前越狱已经积累了不少的经验,于是这次猫咪逃的更快了,如果皮皮想要寻找猫咪,相当于身处在一个地图中,地图上有一些部分可以正常通行,而另一些部分则不能通过。皮皮目前的位置在地图的左上角,他知道猫咪会逃到地图右下角的冰激凌商店。皮皮想要在路上截住猫咪。为了防止走冤枉路,皮皮的每一步只会向右或者向下行走。皮皮想知道,有多少条通往冰激凌商店的路径呢?
输入描述:
输入由 n+1 行组成;
第一行,为两个整数 n 和 m(0<n<m<=20)
第二行至第 n+1 行,每行有 m 个整数,第 i 行第 j 列的整数代表地图上的坐标为(i,j)的点是否可以通过,1 表示该点可以通过,0 表示该店不能通过(数据保证起点和终点是可以通过的)
输出描述:输出一个正整数,代表皮皮走到冰激凌商店的可行路径数
4 5
1 1 1 1 0
0 1 1 1 0
0 1 0 1 1
1 1 1 1 1
7
这一道题的考点是标数法与递推算法,标数法即:
1 1 1 1 0
0 1 2 3 0
0 1 0 3 3
0 1 1 4 7
这里是每一个点能被走到的方法数等于左边或上面的之和,因此,我们用算法模拟这个过程。
- #include<iostream>//调用输入输出流头文件
- using namespace std;//使用标准名字空间
- int a[21][21],x;//定义数组a,包含21*21个整数类型变量,定义整数类型变量x
- int main(){//主函数开始
- a[1][0]=1;//将a的1*0号元素赋值为1
- int n,m;//定义整数类型变量n,m
- cin>>n>>m;//输入n,m的值
- for(int i=1;i<=n;i++)//for循环,计数器i从1自增到n,共循环n次
- for(int j=1;j<=m;j++){//for循环,计数器i从j自增到m,共循环次
- cin>>x;//输入x的值
- if(x) a[i][j]=a[i-1][j]+a[i][j-1];//如果x为真,将a的i,j号元素赋值为a的i-1,j号元素+a的i,j-1号元素
- }
- cout<<a[n][m]<<endl;//输出a的n,m号元素并换行
- return 0;//主函数结束,返回0
- }
如果你得到一篇英文文章,你需要统计每个英文字母(不区分大小写)的出现次数,并按次数从高到低排序后展示(如果出现次数相同,则较靠前的字母在前)
输入描述:
输入共一行,是一篇英文文章,文章中仅可能出现空格、大小写英文字母及如下字符:’”.?;:-+=$/()
输出描述:
输出包含 26 行:
每行格式为 I a: x,其中 i 为该输出行为第几行,a 为文章中出现次数第 i 多(如果出现次数相同,则字典序靠前的字母在前)的英文字母的大写形式,x 是其出现的次数,如在第二行中,字母 s 出现的次数第二多,出现了 10 次,则输出 2 S: 10
Love Your Life(Henry David Thoreau) However mean your life is ,meet it and live it; do not shun it and call it hard names
1 E: 12
2 I: 9
3 A: 8
4 N: 7
5 O: 7
6 T: 7
7 D:6
8 L: 6
9 R: 6
10 H: 5
11 U: 4
12 V: 4
13 M: 3
14 S: 3
15 Y: 3
16 F: 2
17 C: 1
18 W: 1
19 B: 0
20 G: 0
21 J: 0
22 K: 0
23 P: 0
24 Q: 0
25 X: 0
26 Z: 0
这道题非常简单,只需要识别字符串的各各元素即可。
- #include<iostream>//调用输入输出流头文件
- #include<algorithm>//调用算法头文件
- #include<cstdio>//调用C语言输入输出头文件
- using namespace std;//使用标准名字空间
- int cnt[26];//定义数组cnt,包含26个整数类型变量
- int main(){//主函数开始
- string s;//定义字符串类型变量s
- getline(cin,s);//整行输入s的值
- for(int i=0;i<s.size();i++){//for循环,计数器i从0自增到s的长度减1,共循环s的长度次
- if('a'<=s[i] && s[i]<='z')//如果s的i号元素为小写字母
- cnt[s[i]-'a']++;//cnt的s的i号元素-a自增1
- if('A'<=s[i] && s[i]<='Z')//如果s的i号元素为大写字母
- cnt[s[i]-'A']++;//cnt的s的i号元素-A自增1
- }
- for(int i=1;i<=26;i++){//for循环,计数器i从1自增到26,共循环26次
- int big=max_element(cnt,cnt+26)-cnt;//定义整数类型变量big,并初始化赋值为最大值的编号
- printf("%d %c: %d\n",i,'A'+big,cnt[big]);//输出最大值的内容
- cnt[big]=-1;//将cnt的big号元素赋值为-1
- }
- return 0;//主函数结束,返回0
- }
班里共有 m 名同学,班主任将 m 名学生为围成一个圈,从 1 到 m 进行编号,然后挑选一个数字 n(1<n<9),从第一个同学开始,从 1 到 n 报数,报到 n 的同学就出局,然后下一位同学重新从 1 开始报数,留下的最后一名同学就是小寿星。由于女生少,班主任决定:每名女生第一次数到 n 不会立刻出局,第二次数到 n 时出局。 例如,m=4,其中有 1 名女生,编号顺序为 1,2,3,4,分别是男,女,男,男,n=2,第一轮报数,报到的是 2 号女生,暂不出局。第二轮报数,四号男生报 2 出局。第三轮报数,二号女生报 2 出局。第四轮报数,1 号男生报 2 出局,最后留下 3 号男生,输出 3。
输入描述:
第一行,一个正整数 m,表示班上的学生人数;
第二行,m 个正整数 s1,s2,s3……sm,用空格分隔,si=1 表示编号 i 的学生是男生,si=0 表示编号为 i 的学生是女生;
第三行,一个正整数 n,表示数到 n 的人出局(注意:女生有 2 次机会)
输出描述:
输出最后留下的学生的编号。
5
1 0 0 1 1
3
2
这道题是约瑟夫环的进阶版,这里就难以使用递归了,最好使用模拟。
首先,设女生有两条命,男生有一条命,于是用循环结构来依次判断,将最后的人id%m+1输出。
- #include<iostream>//调用输入输出流头文件
- using namespace std;//使用标准名字空间
- int life[10000];//定义数组life,包含10000个整数类型变量
- int main(){//主函数开始
- int m,n;//定义整数类型变量m,n
- cin>>m;//输入m的值
- for(int i=0;i<m;i++){//for循环,计数器i从0自增到m-1,共循环m次
- cin>>life[i];//输入life的i号元素
- life[i]=2-life[i];//将life的i号元素赋值为2-life的i号元素
- }
- cin>>n;//输入n的值
- int cnt=0,die=0,id=0;//定义整数类型变量cnt,die,id,并全部初始化赋值为0
- while(1){//装死循环
- if(life[id]) cnt++; //如果life的id号元素不为0,cnt自增1,即当前位置是活人, 报数
- if(cnt==n){ //如果cnt等于n,即已报数到 n
- life[id]--; //life的id号元素自减1,即扣1条命
- if(life[id]==0) die++; //如果life的id号元素等于0,即命减到 0, 死亡人数 +1
- cnt=0; //将cnt赋值为0,即重置
- }
- if(die==m) break; //如果die等于m,即最后一人, 跳出
- id=(id+1)%m;//将id赋值为id+1%m
- }
- cout<<id%m+1<<endl; //输出id%m+1的值
- return 0;//主函数结束,返回0
- }
那么本期题解就到此结束了,感谢大家的收看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。