蓝桥杯——校内模拟题目分析
(顺序有可能会有点乱,不要信上面填的答案,看解析,后面附有答案)
1
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuMTN2IzM4IDNwITL4gDOzETO0gDM5EzMwAjMwITLzUDM0UDOx8CXzADMyAjMvw1M1ADN1gTMvwVY0VmYtk2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
这道题就不用多说了吧,计算机的单位之间进制为2的10次方
所以答案为: 15488
附上常用的计算机单位 由大到小 TB GB MB KB K
2:
这里来确认下约数的定义 简单的说就是能够整除
例如 4 对应的约数就有1,2,4
OK 那这个题应该就会很简单了吧
这里用程序作答
1 #include<stdio.h>
2 int main()
3 {
4 int i,j;
5 int sum=0;
6 for(i=1;i<=1200000;i++)
7 {
8 if(1200000%i==0)
9 {
10 sum++;
11 }
12 }
13 printf("sum=%d\n",sum);
14 return 0;
15 }
代码就不做解释了 很简单
3
这里呢提供两种方法
(1) 暴力枚举 当然 这里的数比较小 很快就出结果了
下面是代码
#include<stdio.h>
int main()
{
int i,j;
int sum=0;
int N;//输入N 这里是2019
scanf("%d",&N);
for(i=1;i<=N;i++)
{
int j=i;
while (j!=0)
{
if(j%10==9)
{
sum++;
break;
}
j/=10;
/* code */
}
}
printf("%d\n",sum);
return 0;
}
那么 下面我们看第二种
答案是 544
(2)数学分析的方法
我们先来看个位数
1个
两位数 有9+1+8=18
下面看三位数 9*(18+1)+=252
那么1-1000共有271
故1-2000共有542
再加上2009 2019
共计 544 这个方法有点绕 不是数学特别好的还是建议直接枚举
4:
首先 叶节点 没有下一层的节点 可以简单理解为尾巴节点
一点 必须要有一个开始节点 下面才可以开始分叉 答案应该就是2018
5:
分析题目 符合条件的数 为 左边有比他小的 右边有比他大的
那么,我分析算法
第一种 一个一个去找呗 这里就不多说了
我们主要看第二种
首先我们想 对于第n个数 如果我们知道前面n-1个数的最小值 和后面n+1,,,到结尾的最大值 我们是不是只需要简单的 对比一下就可以得出结果
那么我们就要获取 最大最小 信息
我们采用动态规划的想法 以求最小为例 我们知道前n个的最小值(记做min) 我们算前n+1 的最小值 是不是就要比较 min和第n+1个数 并得出前n+1个的最小值
所以 我们只需要遍历两遍 就个得出最大和最小 然后我们在遍历一遍就能得出最后答案
下面附上代码
(先发布了)
最近两天补全代码板块
6:
首先 题目的意思就是说判断该单词是不是 辅音 元音 辅音 元音
其实这个题目 基本 没有什么讲头 就判断就行了呗
提示一下(当然有点多余) 当第一个不是辅音的时候直接结束就好了
还有长度不到四直接结束就好了
当然还有好多 都不是说会提供太多便利的思想 但,还是可以拓展下自己的思维的
这个题目就不上代码了
7:
这个题目呢 我没有发现太简单的方法 个人认为就是全排解的问题
关于全排列 本人博客首页有详细解析 就不多说了
关键就是找到所有可能的序列 进行判断就好了
再有一个 就是 用全排列的时候 可以在每次交换后就进行判断 会剩下好多时间
特别是当序列特别长的时候 关于n的问题 其实我们可以当做每个前面已经有n了 这样就好理解点
代码的话 也不写了 判断的代码 相信 学过编程的人都会写
另外 附上全排列的链接 https://www.cnblogs.com/cndccm/p/12461902.html
这个题就稍微有一点点意思了
首先我来说说我的最初想法 我想上两个数组 一个往另一个种
后来 我咋写TM都有bug 然后我就烦了 不写了
后来受到启发 发现了有个更好的方法
我们用表格中的一块来表示我们的地 上面那一块就是我们最初的草 (以一个草为示例)
我们假设时间为三个月
我们看三个月后是什么样子
发现什么规律了吗
是不是有个有点规则的图形 当然 你的地要足够大
相比一月一月的让他去长 要方便的不是一星半点吧
所以 我的意思就是按照这个图形的规律去长草 规律不用我多说吧
n月 从一开始草的位置开始 左边n右边n上边一个
然后上边一个 左右各n-1 知道左右都为0
上下都是对称的 就不说下面的了
需要注意的就是边界的问题
每次长新草之前都要考虑好是否已经到达边界
当然开头要进行遍历 记录最初所有草的位置 然后按照规律长草就好了
最后输出就OK了
package com.cryptape.framework.system;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] argv){
// 获取源数据
Scanner in = new Scanner(System.in);
int m = in.nextInt();
int n = in.nextInt();
int[][] source = new int[m][n];
// 存哪些点有草 eg i,j
ArrayList<String> sourceGreenList = new ArrayList();
// 获取原始草
for(int i=0; i<m; i++ ){
char[] tmp = in.next().toCharArray();
for(int j=0; j<n; j++){
if(tmp[j]=='g'){
source[i][j]=1;
sourceGreenList.add(i+","+j);
}else {
source[i][j]=0;
}
}
}
// 获取月数
int count = in.nextInt();
//
for(int i=0; i<sourceGreenList.size(); i++){
// 解析出点的 (p,q)
String[] tmp = sourceGreenList.get(i).split(",");
int p = Integer.valueOf(tmp[0]); //行
int q = Integer.valueOf(tmp[1]); //列
//
for(int j=0; j<=count; j++){
if(q-j>=0){
for(int t=0; t<=count-j; t++){
if(p-t>=0){
source[p-t][q-j] = 1;
}
if(p+t<m){
source[p+t][q-j] = 1;
}
}
}
if(q+j<n){
for(int t=0; t<=count-j; t++){
if(p-t>0){
source[p-t][q+j] = 1;
}
if(p+t<m){
source[p+t][q+j] = 1;
}
}
}
}
}
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(source[i][j]==0){
System.out.print(".");
} else {
System.out.print("g");
}
}
System.out.println();
}
}
}
这是用java写的 (不过这次模拟的是C语言哈 不过道理都一样 )
下面 还有最后一个题
看着题目 看着花花丽丽 其实就是个排序呗
找出来要表演的节目 按照顺序输出就完了呗
我的建议是 排序的时候 排下标 然后找出分数最高的m个坐标 然后按照下标的大小对应先后关系 表演不就完了
实在要说有什么优化的方法 无非就是 排序算法写的精妙一点
再有就是 在定最后顺序的时候 不要排序了
吧节目数组定为二维数组 直接修改一个特定的第二排的值 这样只需对 节目数组 要表演的节目数组 进行一次遍历就OK 了
代码就不写了 相信大家都会写
好了 这次的模拟到这里就结束了
这次的模拟说真的其实技术含量还是比较低的
相对于蓝桥杯的历届真题 还是很水的
个人作品,
如有错误,请指出;
如要转载,请注明出处。
三克油。。