天天看点

蓝桥杯——校内模拟题目分析

蓝桥杯——校内模拟题目分析

(顺序有可能会有点乱,不要信上面填的答案,看解析,后面附有答案)

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 了   

 代码就不写了   相信大家都会写

好了  这次的模拟到这里就结束了       

这次的模拟说真的其实技术含量还是比较低的 

相对于蓝桥杯的历届真题 还是很水的    

个人作品,

如有错误,请指出;

如要转载,请注明出处。

三克油。。

继续阅读