2018 蓝桥杯省赛 B 组模拟赛(五)题目及解析

A. 结果填空:矩阵求和

给你一个从 n×n 的矩阵,里面填充 1 到 n×n 。例如当 n 等于 3 的时候,填充的矩阵如下。

1 2 3
4 5 6
7 8 9

现在我们把矩阵中的每条边的中点连起来,这样形成了一个新的矩形,请你计算一下这个新的矩形的覆盖的数字的和。比如,n = 3 的时候矩形覆盖的数字如下。

  2
4 5 6
  8

那么当 n 等于 101 的时候,矩阵和是多少?

题目解析: 这题画一个7×7的矩阵观察起来会比较直观。矩形边中点的连线包括边上的 元素和所有处于边界点之间的元素。在找准行列关系之后就很简单了。

填空答案如下:

#include <iostream>
using namespace std;
int main() {
//    cout << "/*请在这里填入答案*/" << endl;
    cout << "26020201" << endl;
    return 0;
}

题解代码如下:

#include <iostream>
#include <cmath>
using namespace std;
int a[1000][1000];
int main(){
    int n;
    cin>>n;
    //n=101;
    int p=1;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            a[i][j]=p++;
        }
    }
    int m=n/2;
    int sum=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(i<=m && j>=m-i && j<=m+i){
                sum+=a[i][j];
            }else if(i>m && j>=m-(n-i-1) && j<=m+(n-i-1)){
                sum+=a[i][j];
            }
        }
    }
    cout<<sum;
    return 0;
}

B. 结果填空:素数个数

用 0,1,2,3⋯7 这 8 个数组成的所有整数中,质数有多少个(每个数字必须用到且只能用一次)。

提示:以 0 开始的数字是非法数字。

题目解析: 这题考察全排列,注意第一个数字不能是0。

填空答案如下:

#include <iostream>
using namespace std;
int main() {
//    cout << "/*请在这里填入答案*/" << endl;
    cout << "2668" << endl;
    return 0;
}

题解代码如下:

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int isPrime(int n){
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0) return 0;
    }
    return 1;
}
int main(){
    int cnt=0;
    int a[8]={0,1,2,3,4,5,6,7};
    do{
        if(a[0]==0) continue;
        int sum=0;
        for(int i=0;i<8;i++){
            sum=sum*10+a[i];
        }
        if(isPrime(sum)) cnt++;
    }while(next_permutation(a,a+8));
    cout<<cnt;
    return 0;
}

D. 代码填空:快速幂

一个数的整数次幂,是我们在计算中经常用到的,但是怎么可以在 O(log(n)) 的时间内算出结果呢?

代码框中的代码是一种实现,请分析并填写缺失的代码,求 x^y mod p的结果。

题目解析: 这题主要考察y & 1。&是位与操作符,运算法则是在二进制数下,相同位的两个数字都为1,则为1;若有一个不为1,则为0。 y & 1做位与操作,y&1是y和1做“按位与”运算,1的二进制只有末位是1,所以y & 1就是只保留y的末位(二进制)。y & 1就表示了y的奇偶性。y & 1 == 1为奇数,反之为偶数。

填空答案如下:

#include <iostream>
using namespace std;

int pw(int x, int y, int p) {
    if (!y) {
        return 1;
    }
//    int res = /*在这里填写必要的代码*/;
    int res = pw(x,y-1,p)+pw(x,y-1,p)*!(y&1);
    if (y & 1) { //判断奇偶数,y&1==1为奇数,反之为偶数
        res = res * x % p;
    }
    return res;
}

int main() {
    int x, y, p;
    cin >> x >> y >> p;
    cout << pw(x, y, p) << endl;
    return 0;
}

E. 代码填空:末尾零的个数

N! 末尾有多少个 0 呢?

N! = 1 x 2 x ··· x N。

代码框中的代码是一种实现,请分析并填写缺失的代码。

填空答案如下:

#include <iostream>
using namespace std;
int main() {
    int n, ans = 0;
    cin >> n;
    while (n) {
      //ans += /*在这里填写必要的代码*/;
        ans += n/=5;
    }
    cout << ans << endl;
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java 源码分析

动态规划

​ 动态规划一般来说和分治有点类似都是让他们去处理相同的子问题,但是在动态规划里面你会遇到更多的相同子问题。然后我们就会导致很多的重复计算,所以一般我们可...

2965
来自专栏机器学习和数学

[编程经验] SciPy之图像处理小结

Python中可以处理图像的module有很多个,比如Opencv,Matplotlib, Numpy, PIL以及今天要分享的SciPy。其他几个后续都会总结...

7047
来自专栏技术随笔

[RNN] Simple LSTM代码实现 & BPTT理论推导

4384
来自专栏利炳根的专栏

学习笔记CB013: TensorFlow、TensorBoard、seq2seq

tensorflow基于图结构深度学习框架,内部通过session实现图和计算内核交互。

4307
来自专栏决胜机器学习

有趣的算法(一)——n阶层尾部有几个0

有趣的算法(一)——n阶层尾部有几个0 (原创内容,转载请注明来源,谢谢) 最近在网上看到好几次这个题目,觉得挺有意思,则准备用PHP进行实现。 1、题目 ...

3556
来自专栏xingoo, 一个梦想做发明家的程序员

动态规划基本要素

动态规划性质: 1  最优子结构性质  2 子问题重叠性质 ----->该问题可用动态规划算法求解的基本要素 1 最优子结构 当问题的最优解包含了其子问题的最优...

20010
来自专栏机器之心

教程 | 在Python和TensorFlow上构建Word2Vec词嵌入模型

选自adventuresinmachinelearning 机器之心编译 参与:李诗萌、刘晓坤 本文详细介绍了 word2vector 模型的模型架构,以及 T...

4557
来自专栏HansBug's Lab

算法模板——线段树6(二维线段树:区域加法+区域求和)(求助phile)

实现功能——对于一个N×M的方格,1:输入一个区域,将此区域全部值作加法;2:输入一个区域,求此区域全部值的和 其实和一维线段树同理,只是不知道为什么速度比想象...

3025
来自专栏ATYUN订阅号

四个用于Keras的很棒的操作(含代码)

Keras是最广泛使用的深度学习框架之一。它在易于使用的同时,在性能方面也与TensorFlow,Caffe和MXNet等更复杂的库相当。除非你的应用程序需要一...

1004
来自专栏贾老师の博客

启发式寻路算法

4133

扫码关注云+社区