今年蓝桥杯定在4月9号省赛,自己今天看了b站上的2017年的b组c的真题讲解,感觉自己对算法一无所知,自己必须要加强算法学习了。4道结果填空题2道代码填空题4道编程大题。
第一题 购物单
简单,excel就能计算,在不能直接手算;
第二题 等差素数列
用到了c++ lower_bound();函数,容器 set<int> all; all.insert(); all.found;把需要查找的数放入容器中去,用容器函数来查找。用到算法暴力枚举1枚举首项2枚举公差3枚举个数;就是三重枚举。
第三题 方格分割
算法dfs搜索,重点不是直接搜索,而是转变思维搜索,还是以某个角作为原点建立二维坐标,但是搜索起点改为中间,并且是对称搜索,以中心点为对称点。每当走到边界结果记录。其中对搜索越界的判断很重要。
dire[][2]={//方向数组
{-1,0},
{1,0},
{0,-1},
{0,1},
};
vis[][]//访问数组
第四题 取位数
题不是很难,但是有细节问题,需要根据题目判断是从左到右取还是从右到左取,‘/10’取高位
‘%10’取低位。 用到了递归。
int len(int x){
if(x<10) return 1;
return len(x/10)+1;
}
第五题 最大公共字串
dp问题 好题
第六题 日期问题
题目思路简单,细节较多,需要注意,日期问题几乎快成了蓝桥杯必考题了。题目中涉及了字符串处理问题;输入提取数值问题;定义 string 类型作为输入,后当做数组使用取出各个数,需要舍弃不如数据中的“/”,当成数组直接跳过“/”的那一位即可。在把单个字符数字转换为两位数字,字符变为数字减字符0在乘10加起来。 还涉及 到非法判段,闰年判断 2月天数的不同。
i 2 s函数非常好用
bool isleap(int year){//闰年判断
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
#include <sstream>//stringstream必备头文件
void i2s(int i; string &s){//整数转字符int--->string
stringstream ss;
ss << i;
ss >> s;
}
第7题 不定方程
比较难 没听
第8题 K倍区间
前缀和、树状Arruy、区间数;暴力的话必须优化 就是枚举优化 采用二分法优化