藍橋杯——校內模擬題目分析

藍橋杯——內模擬題目分析

(順序有可能會有點亂,不要信上面填的答案,看解析,後面附有答案)html

1java

 

 

這道題就不用多說了吧,計算機的單位之間進製爲210次方算法

因此答案爲:   15488編程

附上經常使用的計算機單位  由大到小   TB GB MB KB K數組

 

2優化

 

 

 

 

這裏來確認下約數的定義    簡單的說就是可以整除   spa

例如  4   對應的約數就有1243d

OK  那這個題應該就會很簡單了吧code

這裏用程序做答htm

 

 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 了   

 代碼就不寫了   相信你們都會寫

 

好了  此次的模擬到這裏就結束了       

 

此次的模擬說真的其實技術含量仍是比較低的 

相對於藍橋杯的歷屆真題 仍是很水的    

相關文章
相關標籤/搜索