目录
前言
一、黑心商家
题目描述
样例输入
样例输出
题目解析
AC代码1(分类讨论)
AC代码2(简化版)
二、调皮的猫咪
题目描述
样例输入
样例输出
题目解析
AC代码
三、字母频率统计
题目描述
样例输入
样例输出
题目解析
AC代码
四、选小寿星
题目描述
样例输入
样例输出
题目解析
AC代码
结束语
大家好,这一篇题解主要是关于2020那届蓝桥杯的题解。
黑心商家在网上出售糖果,根据糖果的重量额外计算邮费,计算规则:重量在 1000 克以内(包含 1000 克),邮费 8 元。超过 1000 克的部分,每 500 克加收超重费 4 元,不足 500 克部分按 500 克计算。现在我们知道每 100 克糖果 12元(限定只能购买 100 克的倍数)请你计算出顾客想要吃到糖果共需要的花费(糖果费用和邮费的总和)
输入描述:输入一行,包含一个整数,表示糖果的重量,单位克
输出描述:输出一行,包含一个整数,表示糖果的总花费
1200
156
这一篇文章比较简单,分类讨论是一种方法,也可以简化。
#include//调用输入输出流头文件
#include//调用数学头文件
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<
#include//调用C语言输入输出头文件
#include//调用算法头文件
#include//调用数学函数头文件
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+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//调用输入输出流头文件
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<
如果你得到一篇英文文章,你需要统计每个英文字母(不区分大小写)的出现次数,并按次数从高到低排序后展示(如果出现次数相同,则较靠前的字母在前)
输入描述:
输入共一行,是一篇英文文章,文章中仅可能出现空格、大小写英文字母及如下字符:’”.?;:-+=$/()
输出描述:
输出包含 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//调用输入输出流头文件
#include//调用算法头文件
#include//调用C语言输入输出头文件
using namespace std;//使用标准名字空间
int cnt[26];//定义数组cnt,包含26个整数类型变量
int main(){//主函数开始
string s;//定义字符串类型变量s
getline(cin,s);//整行输入s的值
for(int i=0;i
班里共有 m 名同学,班主任将 m 名学生为围成一个圈,从 1 到 m 进行编号,然后挑选一个数字 n(1
输入描述:
第一行,一个正整数 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//调用输入输出流头文件
using namespace std;//使用标准名字空间
int life[10000];//定义数组life,包含10000个整数类型变量
int main(){//主函数开始
int m,n;//定义整数类型变量m,n
cin>>m;//输入m的值
for(int i=0;i>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<
那么本期题解就到此结束了,感谢大家的收看。