一些记录:看视频【蓝桥杯】2013年-2018年蓝桥杯历年省赛真题 Java C++ A组 B组 C组
emmm,参加完校赛,被完虐,,,感觉蓝桥杯的题太简单,,,,接下来换地方去学leetcode一段时间
2013-java-A
视频的总结
1 日历
Calendar API的使用
1 | Calendar calendar = Calendar.getInstance();//创建实例 |
2 从我做起振兴中华
递归的思路,学习
观察可得,走法要么走右,要么走下
1 | public static int f(int i,int j) { |
3 BigInteger
BigInteger API的使用,主要解决大数问题
1 | BigInteger x = BigInteger.valueOf(2).pow(11213).subtract(BigInteger.ONE);//创建 |
上面的式子等价于:2^11213-1
创建数都要用BigInteger.valueOf(2)
创建一个对象,幂次的话,可以直接用数(幂不是大数)
1 | String s = x.toString();//可以转字符串 |
4 颠倒数字
根据题目意思,一步步编程即可
循环,有调转,可以再来一个循环变量j
1 | for (int i = s.length()-1,j=0; i>=0; i--,j++) { |
5 希尔排序
希尔排序的变种
填空题tip
- 将给定的代码复制过来
- 将___注释,运行
- 自己写main函数
- 根据特殊情况验证
6 逆波兰序
没什么说的,,,
7 断号和连号
每行数据长度不等的输入
1 | ArrayList<Integer> list = new ArrayList<>(); |
8 全排列
全排列
1 | private static void f(int[] arr,int k) {//k:确认某一个排列的第k位 |
9 深搜索
dfs,参数根据变化的量来确定
1 | static void dfs(int i, int j, int steps, int sum) { |
10 邻接图 + 深搜索 + 树的直径
树的直径
找到树上距离最大的点方法:
- 任意选一点,找到距离最大的点
- 用距离最大的点作为一个端点,再找另外一个端点即可。
邻接图
创建
1 | private static List<Node>[] g;// 图的领接表 |
初始化
1 | g = new List[n + 1];//list还需要初始化 |
赋值
1 | for (int i = 0; i < n - 1; i++) { |
Node
1 | static class Node { |
dfs
1 | private static void dfs(int from, int num, long dis) { |
2014-java-A
1 根据内容、常识编程
由于年轻女孩,,,可以简单的默认年龄是1-20进行尝试
2 递归,深搜
边界要判定好
1 | static void dfs(int dian,int hua,int jiu) { |
3 对数字的每一位排序
数字转字符串
1 | String.valueOf(src); |
对字符串里的每一位排序
1 | char [] char1 = s1.toCharArray(); |
判断两字符数组是否相等
1 | new String(char1).equals(new String(char2)) |
1 | static boolean check(int src, int des) { |
4 一句话123循环
n的变化1 2 3 循环。。。
1 | n = n%3+1 |
注意:static方法必须在static类里面
5 堆排序
emmm,填空题不能单靠简单的上下文,,,,保险起见,要学会自己构造例子看结果。
6 全排列
给每个边和顶点编号。
全排列+然后计算每个编的值
全排列
1 | static void f(int k) { |
顶点编号+计算边的值
1 | static void check() { |
7 概率题
涉及概率论的知识,主要用概率论得出公式,然后用计算机计算计算具体的值。。。
有点点麻烦,吐血
数学归纳法
- 只有一个圈,概率为1
- 如果n根绳子组成一个圈,那么必定是n-1根绳子组成一个圈然后加入新的绳子
- 如果n根绳子组成m个圈,可以是n-1根绳子组成m-1个圈,然后新绳自成一圈;也可以是n-1根绳子组成m个圈,然后最后一个新绳加入这个圈。
这里面加入一个圈的公式是:
f[sheng][1] = f[sheng - 1][1] * (sheng - 1) * 2 / (2 * sheng - 1);
看视频吧,,,,总之需要推演的能力
8 递归 / 循环
都可以用,我使用了递归,老师用的循环(更简单,,
1 | public static void dfs(int i,int j,int s,int k) { |
字符变数字
简化操作
1 | static int s2i(String s) { |
9 斐波那契
- mod运算不能交换
- 斐波那契数列 比赛中 用迭代形式来做,不要用递归来做
迭代形式
余数的性质
(A+B)%mod = (A%mod + B%mod)%mod
(A*B)%mod = (A%mod * B%mod)%mod
2015-java-A
easy,循环和递归都能做
可以调试着看过程,确保答案正确
1 easy循环/递归 偶数
i&1==0
==> 偶数i mod 2 == 0
2 日历
calendar获取时间
1 | calendar.getTime()//月份是英文 |
中文
函数:toLocaleString()
1 | c.getTime(); |
结果
1 | Sat Aug 05 10:23:12 CST 2017 |
设置calendar的年月日
重点注意month是月份减1。
设置的时候要月份减1,得出结论的时候要月份+1
1 | //分别设置 |
增加天数
- 方法一:
c.add(Calendar.DATE, 1000);
- 方法二:
calendar.add(Calendar.DAY_OF_YEAR, 1000);