蓝桥杯——校内模拟题目分析
蓝桥杯——校内模拟题目分析
(顺序有可能会有点乱,不要信上面填的答案,看解析,后面附有答案)
1
这道题就不用多说了吧,计算机的单位之间进制为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 了
代码就不写了 相信大家都会写
好了 这次的模拟到这里就结束了
这次的模拟说真的其实技术含量还是比较低的
相对于蓝桥杯的历届真题 还是很水的