蓝桥杯矩阵求和_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

using namespace std;

int main() {

// cout << "/*请在这里填入答案*/" << endl;

cout << "26020201" << endl;

return 0;

}

题解代码如下:

#include

#include

using namespace std;

int a[1000][1000];

int main(){

int n;

cin>>n;

//n=101;

int p=1;

for(int i=0;i

for(int j=0;j

a[i][j]=p++;

}

}

int m=n/2;

int sum=0;

for(int i=0;i

for(int j=0;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<

return 0;

}

B. 结果填空:素数个数

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

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

题目解析:

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

填空答案如下:

#include

using namespace std;

int main() {

// cout << "/*请在这里填入答案*/" << endl;

cout << "2668" << endl;

return 0;

}

题解代码如下:

#include

#include

#include

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<

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

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

using namespace std;

int main() {

int n, ans = 0;

cin >> n;

while (n) {

//ans += /*在这里填写必要的代码*/;

ans += n/=5;

}

cout << ans << endl;

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值