蓝桥杯的考察点每年都会考三类题型,第一种是规律题,典型特征是给出一个变化情况,让你来找出其中的规律,并且根据这个规律开回答它的问题。第二种是考察对于暴力求解的方法的理解与使用情况。第三种也是最难的一种,对于递归类问题的理解,如果要解决这类的问题,需要理解8皇后算法和汉诺塔等诸如此类的问题才行,今天总结的是找规律的问题
例如第七届的第一题,煤球数。题干如下:有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
....
如果一共有100层,共有多少个煤球?
要解决这类的问题,关键是要找准这里面有多少个变量,以及这些变量与最终求解的结果间的关系。
经过观察发现,这里面一共有四个变量,第一个是层号,第二个是每层的数量,第三个是总的数量。各个变量之间的关系为总的数量为各层的煤球数累加,每层的煤球数为上一层的球数加上这一层的层号,于是可以判断,至少需要三个变量,分别代表:层号、每层的煤球数、煤球总数。解题的思路为:定义一个100次的循环,每次循环的时候,层序号加一,有这一层的序号以后,就可以计算出这一层的球数,从而计算出总的煤球数:代码如下:
package hoLidayPraRewie;
/*
* @author理工吴彦祖
* @Info在校大学生,欢迎交流Q2904792453,妹子优先
*/
public class CountOfBru {
//总数
public static int total=0;
//每一层的煤球数
public static int countOfFloor=0;
public static void main(String args[]){
//i为递增的层号
for(int i=1;i<=100;i++){
//先算出这层的煤球数
countOfFloor+=i;
//将这层的煤球数累加到总的煤球数上
total+=countOfFloor;
}
System.out.println(total);
}
}
/*
* 最终结果:171700
*/
同一类型的问题还会与穷举算法一起考察。如出现在了第六届的比赛中的这道题:
生日蜡烛
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛,
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
仔细观察这道题发现,一共有两个变量,第一个变量是岁数,即每年的蜡烛数,他的特点是逐年递增。第二个变量是总的蜡烛数,他的特点是总的蜡烛数是总的蜡烛数加上岁数。从不同的岁数开始过生日,依次出现的总的蜡烛数的情况是不一样的,于是,可以穷举出所有的岁数,如果从这个岁数开始过生日,如果总的蜡烛数会出现236,就将这个数字打印出来,代码如下:
package hoLidayPraRewie;
/*
* @author理工吴彦祖
* @Info在校大学生,欢迎交流Q2904792453,妹子优先
*/
public class BirthCandle {
public static void main(String[] args) {
//遍历所有岁数的情况,人类正常寿命为0~100岁
for(int i=0;i<=100;i++){
//对于每一种岁数开头的具体情况,总的蜡烛数先设为0
int total=0;
//计算书从第i岁到100岁的每一年的总的蜡烛数的变化情况
for(int j=i;j<=100;j++){
total+=j;
//如果某一年能够出现总的蜡烛数为236的情况,就将这个i打印出来
if(total==236)
System.out.println(i);
}
}
}
}
/*
* 结果为26
*/
还有的题目是考察暴力解法与找规律相结合或者回溯法与找规律相结合,这个在后面的博客里面总结。