蓝桥杯初赛b组试题Word文档下载推荐.docx

上传人:b****5 文档编号:18685292 上传时间:2022-12-31 格式:DOCX 页数:28 大小:31.12KB
下载 相关 举报
蓝桥杯初赛b组试题Word文档下载推荐.docx_第1页
第1页 / 共28页
蓝桥杯初赛b组试题Word文档下载推荐.docx_第2页
第2页 / 共28页
蓝桥杯初赛b组试题Word文档下载推荐.docx_第3页
第3页 / 共28页
蓝桥杯初赛b组试题Word文档下载推荐.docx_第4页
第4页 / 共28页
蓝桥杯初赛b组试题Word文档下载推荐.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

蓝桥杯初赛b组试题Word文档下载推荐.docx

《蓝桥杯初赛b组试题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《蓝桥杯初赛b组试题Word文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。

蓝桥杯初赛b组试题Word文档下载推荐.docx

三羊献瑞

观察下面的加法算式:

 

祥瑞生辉

三羊献瑞

三羊生瑞气

(如果有对齐问题,可以参看【图1.jpg】)

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

水题,给“祥瑞生辉三羊献气”编号01234567,直接回溯穷举即可

3inta[8];

4boolb[10];

5voiddfs(intcur)

7if(cur==8)

8{

9intx=a[0]*1+a[1]*100+a[2]*10+a[3],y=a[4]*1+a[5]*100+a[6]*10+a[1],z=a[4]*10+a[5]*1+a[2]*100+a[1]*10+a[7];

10if(x+y==z)cout<

a[4]<

a[5]<

a[6]<

a[1]<

12else

14for(inti=0;

i<

10;

i++)

15{

16if(cur==0&

&

i==0)continue;

17if(cur==4&

18if(!

b[i])

19{

20b[i]=1;

21a[cur]=i;

22dfs(cur+1);

23b[i]=0;

24}

25}

26}

27}

28intmain()

29{

30dfs(0);

31return0;

32}

第三题

1085

第四题代码填空 

11‘

格子中输出

StringInGrid函数会在一个指定大小的格子中打印指定的字符串。

要求字符串在水平、垂直两个方向上都居中。

如果字符串太长,就截断。

如果不能恰好居中,可以稍稍偏左或者偏上一点。

下面的程序实现这个逻辑,请填写划线部分缺少的代码。

stdio.h>

2#include<

string.h>

3

4voidStringInGrid(intwidth,intheight,constchar*s)

5{

6inti,k;

7charbuf[1];

8strcpy(buf,s);

9if(strlen(s)>

width-2)buf[width-2]=0;

10

11printf("

+"

);

12for(i=0;

width-2;

i++)printf("

-"

13printf("

+\n"

14

15for(k=1;

k<

(height-1)/2;

k++)

16{

17printf("

"

18for(i=0;

19printf("

\n"

20}

21

22printf("

23

24printf("

%*s%s%*s"

_____________________________________________);

//填空

25

26printf("

27

28for(k=(height-1)/2+1;

height-1;

30printf("

31for(i=0;

32printf("

33}

34

35printf("

36for(i=0;

37printf("

38}

39

40intmain()

41{

42StringInGrid(20,6,"

abcd1234"

43return0;

44}

对于题目中数据,应该输出:

++

abcd1234 

(如果出现对齐问题,参看【图1.jpg】)

注意:

只填写缺少的内容,不要书写任何题面已有代码或说明性文字。

我是一名OI党,入门直接学的是C++,结果考了个printf里面%*s的用法。

太特么冷门了,穷举了没试出来,原来后面的参数要跟两个。

分数11分怒丢

(width-strlen(s)-2)/2,"

s,(width-strlen(s)-1)/2,"

备注:

答案可以形式多样性,只要代入使得代码成立即可,但要注意奇偶问题所以后面一个要+1不然sample过了也是错的

第五题代码填空 

13‘

九数组分数

1,2,3...9这九个数字组成一个分数,其值恰好为1/3,如何组法?

下面的程序实现了该功能,请填写划线部分缺失的代码。

2

3voidtest(intx[])

5inta=x[0]*1+x[1]*100+x[2]*10+x[3];

6intb=x[4]*10+x[5]*1+x[6]*100+x[7]*10+x[8];

7

8if(a*3==b)printf("

%d/%d\n"

a,b);

9}

11voidf(intx[],intk)

12{

13inti,t;

14if(k>

=9)

16test(x);

17return;

18}

19

20for(i=k;

9;

21{

22{t=x[k];

x[k]=x[i];

x[i]=t;

}

23f(x,k+1);

24_____________________________________________//填空处

30intx[]={1,2,3,4,5,6,7,8,9};

31f(x,0);

32return0;

水题,回溯法的最最基本常识,全局变量回溯完成后必须更改回初值

{t=x[k];

x[k]=x[i];

x[i]=t;

}

1.答案可以形式多样性,只要代入使得代码成立即可

2.我个人认为一个横线可以填多个语句,所以去掉大括号,或者利用原有t值少写一句子noproblem

第六题结果填空 

17‘

加法变乘法

我们都知道:

1+2+3+...+49=1225

现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015

1+2+3+...+10*11+12+...+27*28+29+...+49=2015

就是符合要求的答案。

请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

需要你提交的是一个整数,不要填写任何多余的内容。

水题,一共是48个位置,C(48,2)扣掉连在一起的情况,穷举一遍过即可。

3intmain()

5for(inti=1;

47;

6for(intj=i+2;

j<

49;

j++)

7{

8intsum=0;

9for(intk=1;

k<

i;

k++)sum+=k;

10sum+=i*(i+1);

11for(intk=i+2;

j;

12sum+=j*(j+1);

13for(intk=j+2;

50;

14if(sum==2015)cout<

i<

15}

16return0;

17}

第六题

16

第七题结果填空 

21‘

牌型种数

小明被劫持到X赌城,被迫与其他3人玩牌。

一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。

这时,小明脑子里突然冒出一个问题:

如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?

请填写该整数,不要填写任何多余的内容或说明文字。

水题,一共是记号为A,2,3,4,5,6,7,8,9,10,J,Q,k的十三个元素,每个元素的情况可能是0,1,2,3,4。

这十三个元素的和为13即可。

回溯穷举再剪枝即可。

3intans=0,sum=0;

4voiddfs(intcur)

6if(sum>

13)return;

7if(cur==13)

9if(sum==13)ans++;

10return;

14for(inti=0;

5;

16sum+=i;

17dfs(cur+1);

18sum-=i;

21}

22intmain()

23{

24dfs(0);

25cout<

26return0;

第七题

3598180

第八题程序设计15‘

移动距离

X星球居民小区的楼房全是一样的,并且按矩阵样式排列。

其楼房的编号为1,2,3...

当排满一行时,从下一行相邻的楼往反方向排号。

当小区排号宽度为6时,开始情形如下:

456

121110 

987

131415.....

我们的问题是:

已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)

输入为3个整数wmn,空格分开,都在1到10范围内

w为排号宽度,m,n为待计算的楼号。

要求输出一个整数,表示mn两楼间最短移动距离。

例如:

用户输入:

682

则,程序应该输出:

4

再例如:

4720

5

资源约定:

峰值内存消耗<

256M

CPU消耗<

1ms

请严格按要求输出,不要画蛇添足地打印类似:

“请您输入...”的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:

main函数需要返回0

只使用ANSIC/ANSIC++标准,不要调用依赖于编译环境或操作系统的特殊函数。

所有依赖的函数必须明确地在源文件中#include<

xxx>

,不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

从分值上都能看出来是水题。

比前面两个填空题的分值都低。

最简单的做法,小学生都会的,用数论的完全剩余系,我们强行更改矩阵的编号

比如题目中的强行更改为:

1110 

6

121314......

这样就算起来非常方便了,要求的答案就是坐标之差

#include<

cmath>

usingnamespacestd;

intmain()

{

intw,m,n;

cin>

>

w>

m>

n;

m--;

n--;

intm1=m/w,m2=m%w;

if(m1&

1)m2=w-1-m2;

intn1=n/w,n2=n%w;

if(n1&

1)n2=w-1-n2;

cout<

abs(m1-n1)+abs(m2-n2)<

return0;

第八题

第九题 

程序设计25‘

垒骰子

赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。

经过长期观察,atm发现了稳定骰子的奥秘:

有些数字的面贴着会互相排斥!

我们先来规范一下骰子:

1的对面是4,2的对面是5,3的对面是6。

假设有m组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。

atm想计算一下有多少种不同的可能的垒骰子方式。

两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。

由于方案数可能过多,请输出模10^9+7的结果。

不要小看了atm的骰子数量哦~

「输入格式」

第一行两个整数nm

n表示骰子数目

接下来m行,每行两个整数ab,表示a和b数字不能紧贴在一起。

「输出格式」

一行一个数,表示答案模10^9+7的结果。

「样例输入」

21

12

「样例输出」

544

「数据范围」

对于30%的数据:

n<

=5

对于60%的数据:

=100

对于100%的数据:

0<

n<

=10^9,m<

=36

2ms

终于不是水题了,然而却没全做出来。

难度跳跃太大。

考场上,我先用dfs做,结果数字大于5的时间就hold不住了,于是果断改成记忆化动态规划,但是只能到一万,实在没办法了。

大神跟我说用矩阵快速幂做,所以现在立马现学现用。

程序有空补。

【考场程序】讲解:

利用记忆化DP穷举底面衔接的所有情况,dp[p][q]表示第p层底面是q的情况种数,侧面是相互独立的最后乘以4^n即可比如提给数据就是34再乘上两个4。

但是上限1实在是达不到了。

cstring>

3#defineN1007

4usingnamespacestd;

5//考场上我用的map<

int,int>

现在想想发现多余了

6into[7]={0,4,5,6,1,2,3};

7boolfuck[7][7];

8intn,m;

9longlongans=0;

10constintmaxn=25;

11longlongdp[maxn][7];

12longlongdfs(intcur,intp)

14if(cur==n)return1;

15else

17if(dp[cur][p]>

=0)returndp[cur][p];

18longlongt=0;

19for(inti=1;

7;

20{

21if(fuck[i][o[p]])continue;

22t+=dfs(cur+1,i);

23t%=N;

25returndp[cur][p]=t;

30memset(dp,-1,sizeof(dp));

31cin>

n>

m;

32for(inti=0;

33{

34intt1,t2;

35cin>

t1>

t2;

36fuck[t1][t2]=1;

37fuck[t2][t1]=1;

39for(inti=1;

40{

41ans+=dfs(1,i);

42ans%=N;

43}

44for(inti=0;

n;

45{

46ans*=4;

47ans%=N;

48}

49cout<

50return0;

51}

考场程序,数据不够大所以要扣分,最大只能到10

【AC版本】:

矩阵快速幂

同理我们只考虑底面的情况,最后乘上4^n即可。

我们设六阶矩阵An,其中An的第a行第b列表示第一层底面数字为a、第n层数字为b的所有排列的情况

记六阶矩阵X中,第a行第b列表示相邻两层的是否能成功连接的情况。

a和b能连则为1,a和b不能连则为0(注意是相邻两层的底面,不是衔接面,所以要转化,比如题给的12要改为15)

根据上述定义,易得递推式:

An 

=An-1X,且A1 

=E(六阶单位矩阵)

可得到An的表达式为An 

=Xn-1

那么ans就是矩阵 

Xn-1 

的36个元素之和

注意最后侧面的4^n也要二分幂不然会爆炸

5

6structMatrix

8longlonga[6][6];

9Matrix(intx)

10{

11memset(a,0,sizeof(a));

12for(inti=0;

6;

i++)a[i][i]=x;

13}

14};

15

16Matrixoperator*(constMatrix&

p,constMatrix&

q)

17{

18Matrixret(0);

19for(inti=0;

20for(intj=0;

21for(intk=0;

22{

23ret.a[i][j]+=p.a[i][k]*q.a[k][j];

24ret.a[i][j]%=N;

26returnret;

28

29Matrixfast_mod(Matrixx,intt)

30{

31Matrixret

(1);

32while(t)

34if(t&

1)ret=x*ret;

35x=x*x;

36t>

=1;

37}

38returnret;

39}

40

41intmain()

42{

43Matrixz(0);

i++)

45for(intj=0;

46{

47z.a[i][j]=1;

49intm,n;

50cin>

51for(inti=0;

52{

53intt1,t2;

54cin>

55z.a[t1-1][(t2+2)%6]=0;

56z.a[t2-1][(t1+2)%6]=0;

57}

58Matrixret(0);

59ret=fast_mod(z,n-1);

60longlongans=0;

61for(inti=0;

62{

63for(intj=0;

64{

65ans+=ret.a[i][j];

66ans%=N;

67}

68}

69longlongp=4;

70while(n)

71{

72if(n&

1)

73{

74ans*=p;

75ans%=N;

76}

77p*=p;

78p%=N;

79n>

80}

81cout<

82return0;

83}

第十题程序设计31‘

生命之树

在X森林里,上帝创建了生命之树。

他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。

上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存在一个点列{a,v1,v2,...,vk,b}使得这个点列中的每个点都是S里面的元素,且序列中相邻两个点间有一条边相连。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1