第五届蓝桥杯软件类省赛真题CC++本科A组.docx

上传人:b****6 文档编号:8185032 上传时间:2023-01-29 格式:DOCX 页数:16 大小:36.77KB
下载 相关 举报
第五届蓝桥杯软件类省赛真题CC++本科A组.docx_第1页
第1页 / 共16页
第五届蓝桥杯软件类省赛真题CC++本科A组.docx_第2页
第2页 / 共16页
第五届蓝桥杯软件类省赛真题CC++本科A组.docx_第3页
第3页 / 共16页
第五届蓝桥杯软件类省赛真题CC++本科A组.docx_第4页
第4页 / 共16页
第五届蓝桥杯软件类省赛真题CC++本科A组.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

第五届蓝桥杯软件类省赛真题CC++本科A组.docx

《第五届蓝桥杯软件类省赛真题CC++本科A组.docx》由会员分享,可在线阅读,更多相关《第五届蓝桥杯软件类省赛真题CC++本科A组.docx(16页珍藏版)》请在冰豆网上搜索。

第五届蓝桥杯软件类省赛真题CC++本科A组.docx

第五届蓝桥杯软件类省赛真题CC++本科A组

2014年预赛C/C++本科A组

考生须知:

考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题。

考试时间为4小时。

时间截止后,提交答案无效。

在考试强制结束前,选手可以主动结束考试(需要身份验证),结束考试后将无法继续提交或浏览答案。

选手可浏览自己已经提交的答案。

被浏览的答案允许拷贝。

对同一题目,选手可多次提交答案,以最后一次提交的答案为准。

选手切勿在提交的代码中书写“姓名”、“考号”,“院校名”等与身份有关的信息或其它与竞赛题目无关的内容,否则成绩无效。

选手必须通过浏览器方式提交自己的答案。

选手在其它位置的作答或其它方式提交的答案无效。

试题包含三种类型:

“结果填空”、“代码填空”与“程序设计”。

结果填空题:

要求选手根据题目描述直接填写结果。

求解方式不限。

不要求源代码。

把结果填空的答案直接通过网页提交即可,不要书写多余的内容。

代码填空题:

要求选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。

所填写的代码不超过一条语句(即中间不能出现分号)。

把代码填空的答案(仅填空处的答案,不包括题面已存在的代码或符号)直接通过网页提交即可,不要书写多余的内容。

使用ANSIC/ANSIC++标准,不要依赖操作系统或编译器提供的特殊函数。

程序设计题目:

要求选手设计的程序对于给定的输入能给出正确的输出结果。

考生的程序只有能运行出正确结果才有机会得分。

注意:

在评卷时使用的输入数据与试卷中给出的示例数据可能是不同的。

选手的程序必须是通用的,不能只对试卷中给定的数据有效。

对于编程题目,要求选手给出的解答完全符合ANSIC++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

代码中允许使用STL类库。

注意:

main函数结束必须返回0

注意:

所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。

所有源码必须在同一文件中。

调试通过后,拷贝提交。

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

结果填空(满分2分)

标题:

猜年龄

小明带两个妹妹参加元宵灯会。

别人问她们多大了,她们调皮地说:

“我们俩的年龄之积是年龄之和的6倍”。

小明又补充说:

“她们可不是双胞胎,年龄差肯定也不超过8岁啊。

请你写出:

小明的较小的妹妹的年龄。

 

注意:

只写一个人的年龄数字,请通过浏览器提交答案。

不要书写任何多余的内容。

结果填空(满分5分)

标题:

切面条

一根高筋拉面,中间切一刀,可以得到2根面条。

如果先对折1次,中间切一刀,可以得到3根面条。

如果连续对折2次,中间切一刀,可以得到5根面条。

那么,连续对折10次,中间切一刀,会得到多少面条呢?

答案是个整数,请通过浏览器提交答案。

不要填写任何多余的内容。

结果填空(满分7分)

标题:

神奇算式

由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。

比如:

210x6=1260

8x473=3784

27x81=2187

都符合要求。

如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。

请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:

列出所有算式)。

代码填空(满分6分)

标题:

史丰收速算

史丰收速算法的革命性贡献是:

从高位算起,预测进位。

不需要九九表,彻底颠覆了传统手算!

速算的核心基础是:

1位数乘以多位数的乘法。

其中,乘以7是最复杂的,就以它为例。

因为,1/7是个循环小数:

0.142857...,如果多位数超过142857...,就要进1

同理,2/7,3/7,...6/7也都是类似的循环小数,多位数超过n/7,就要进n

下面的程序模拟了史丰收速算法中乘以7的运算过程。

乘以7的个位规律是:

偶数乘以2,奇数乘以2再加5,都只取个位。

乘以7的进位规律是:

满142857...进1,

满285714...进2,

满428571...进3,

满571428...进4,

满714285...进5,

满857142...进6

请分析程序流程,填写划线部分缺少的代码。

 

//计算个位

intge_wei(inta)

{

if(a%2==0)

return(a*2)%10;

else

return(a*2+5)%10;

}

//计算进位

intjin_wei(char*p)

{

char*level[]={

"142857",

"285714",

"428571",

"571428",

"714285",

"857142"

};

charbuf[7];

buf[6]='\0';

strncpy(buf,p,6);

inti;

for(i=5;i>=0;i--){

intr=strcmp(level[i],buf);

if(r<0)returni+1;

while(r==0){

p+=6;

strncpy(buf,p,6);

r=strcmp(level[i],buf);

if(r<0)returni+1;

______________________________;//填空

}

}

return0;

}

//多位数乘以7

voidf(char*s)

{

inthead=jin_wei(s);

if(head>0)printf("%d",head);

char*p=s;

while(*p){

inta=(*p-'0');

intx=(ge_wei(a)+jin_wei(p+1))%10;

printf("%d",x);

p++;

}

printf("\n");

}

intmain()

{

f("428571428571");

f("34553834937543");

return0;

}

 

注意:

通过浏览器提交答案。

只填写缺少的内容,不要填写任何多余的内容(例如:

说明性文字)

代码填空(满分11分)

标题:

锦标赛

如果要在n个数据中挑选出第一大和第二大的数据(要求输出数据所在位置和值),使用什么方法比较的次数最少?

我们可以从体育锦标赛中受到启发。

如图【1.png】所示,8个选手的锦标赛,先两两捉对比拼,淘汰一半。

优胜者再两两比拼...直到决出第一名。

第一名输出后,只要对黄色标示的位置重新比赛即可。

下面的代码实现了这个算法(假设数据中没有相同值)。

代码中需要用一个数组来表示图中的树(注意,这是个满二叉树,不足需要补齐)。

它不是存储数据本身,而是存储了数据的下标。

第一个数据输出后,它所在的位置被标识为-1

//重新决出k号位置,v为已输出值

voidpk(int*a,int*b,intn,intk,intv)

{

intk1=k*2+1;

intk2=k1+1;

if(k1>=n||k2>=n){

b[k]=-1;

return;

}

if(b[k1]==v)

pk(a,b,n,k1,v);

else

pk(a,b,n,k2,v);

//重新比较

if(b[k1]<0){

if(b[k2]>=0)

b[k]=b[k2];

else

b[k]=-1;

return;

}

if(b[k2]<0){

if(b[k1]>=0)

b[k]=b[k1];

else

b[k]=-1;

return;

}

if(______________________)//填空

b[k]=b[k1];

else

b[k]=b[k2];

}

//对a中数据,输出最大,次大元素位置和值

voidf(int*a,intlen)

{

intn=1;

while(n

int*b=(int*)malloc(sizeof(int*)*(2*n-1));

inti;

for(i=0;i

if(i

b[n-1+i]=i;

else

b[n-1+i]=-1;

}

//从最后一个向前处理

for(i=2*n-1-1;i>0;i-=2){

if(b[i]<0){

if(b[i-1]>=0)

b[(i-1)/2]=b[i-1];

else

b[(i-1)/2]=-1;

}

else{

if(a[b[i]]>a[b[i-1]])

b[(i-1)/2]=b[i];

else

b[(i-1)/2]=b[i-1];

}

}

//输出树根

printf("%d:

%d\n",b[0],a[b[0]]);

//值等于根元素的需要重新pk

pk(a,b,2*n-1,0,b[0]);

//再次输出树根

printf("%d:

%d\n",b[0],a[b[0]]);

free(b);

}

 

intmain()

{

inta[]={54,55,18,16,122,17,30,9,58};

f(a,9);

}

请仔细分析流程,填写缺失的代码。

通过浏览器提交答案,只填写缺失的代码,不要填写已有代码或其它说明语句等。

 

结果填空(满分12分)

标题:

扑克序列

AA223344,一共4对扑克牌。

请你把它们排成一行。

要求:

两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。

请填写出所有符合要求的排列中,字典序最小的那个。

例如:

22AA3344比A2A23344字典序小。

当然,它们都不是满足要求的答案。

 

请通过浏览器提交答案。

“A”一定不要用小写字母a,也不要用“1”代替。

字符间一定不要留空格。

程序设计(满分10分)

标题:

蚂蚁感冒

长100厘米的细长直杆子上有n只蚂蚁。

它们的头有的朝左,有的朝右。

每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。

当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。

这些蚂蚁中,有1只蚂蚁感冒了。

并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。

请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。

 

【数据格式】

第一行输入一个整数n(1

接着的一行是n个用空格分开的整数Xi(-100

正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。

其中,第一个数据代表的蚂蚁感冒了。

要求输出1个整数,表示最后感冒蚂蚁的数目。

例如,输入:

3

5-28

程序应输出:

1

再例如,输入:

5

-108-201225

程序应输出:

3

资源约定:

峰值内存消耗<256M

CPU消耗<1000ms

 

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

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

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

注意:

main函数需要返回0

注意:

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

注意:

所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。

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

仔细阅读程序的输入、输出要求,千万不要输出没有要求的、多余的内容,例如:

“请您输入xx数据:

”。

建议仔细阅读示例,不要想当然!

程序处理完一个用例的数据后,立即退出(return0),千万不要循环等待下一个用例的输入。

程序必须使用标准输入、标准输出,以便于机器评卷时重定向。

对于编程题目,要求选手给出的解答完全符合ANSIC++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

代码中允许使用STL类库。

注意:

main函数结尾需要return0

注意:

所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。

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

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

程序设计(满分12分)

标题:

地宫取宝

X国王有一个地宫宝库。

是nxm个格子的矩阵。

每个格子放一件宝贝。

每个宝贝贴着价值标签。

地宫的入口在左上角,出口在右下角。

小明被带到地宫的入口,国王要求他只能向右或向下行走。

走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。

当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。

请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。

【数据格式】

输入一行3个整数,用空格分开:

nmk(1<=n,m<=50,1<=k<=12)

接下来有n行数据,每行有m个整数Ci(0<=Ci<=12)代表这个格子上的宝物的价值

要求输出一个整数,表示正好取k个宝贝的行动方案数。

该数字可能很大,输出它对1000000007取模的结果。

例如,输入:

222

12

21

程序应该输出:

2

再例如,输入:

232

123

215

程序应该输出:

14

 

资源约定:

峰值内存消耗<256M

CPU消耗<1000ms

 

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

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

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

注意:

main函数需要返回0

注意:

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

注意:

所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。

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

仔细阅读程序的输入、输出要求,千万不要输出没有要求的、多余的内容,例如:

“请您输入xx数据:

”。

建议仔细阅读示例,不要想当然!

程序处理完一个用例的数据后,立即退出(return0),千万不要循环等待下一个用例的输入。

程序必须使用标准输入、标准输出,以便于机器评卷时重定向。

对于编程题目,要求选手给出的解答完全符合ANSIC++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

代码中允许使用STL类库。

注意:

main函数结尾需要return0

注意:

所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。

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

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

程序设计(满分15分)

标题:

斐波那契

斐波那契数列大家都非常熟悉。

它的定义是:

f(x)=1....(x=1,2)

f(x)=f(x-1)+f(x-2)....(x>2)

对于给定的整数n和m,我们希望求出:

f

(1)+f

(2)+...+f(n)的值。

但这个值可能非常大,所以我们把它对f(m)取模。

公式参见【图1.png】

但这个数字依然很大,所以需要再对p求模。

【数据格式】

输入为一行用空格分开的整数nmp(0

输出为1个整数

例如,如果输入:

235

程序应该输出:

0

再例如,输入:

151129

程序应该输出:

25

资源约定:

峰值内存消耗<256M

CPU消耗<1000ms

 

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

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

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

注意:

main函数需要返回0

注意:

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

注意:

所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。

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

 

仔细阅读程序的输入、输出要求,千万不要输出没有要求的、多余的内容,例如:

“请您输入xx数据:

”。

建议仔细阅读示例,不要想当然!

程序处理完一个用例的数据后,立即退出(return0),千万不要循环等待下一个用例的输入。

程序必须使用标准输入、标准输出,以便于机器评卷时重定向。

对于编程题目,要求选手给出的解答完全符合ANSIC++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

代码中允许使用STL类库。

注意:

main函数结尾需要return0

注意:

所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。

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

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

程序设计(满分20分)

标题:

波动数列

观察这个数列:

1302-11-2...

这个数列中后一项总是比前一项增加2或者减少3。

栋栋对这种数列很好奇,他想知道长度为n和为s而且后一项总是比前一项增加a或者减少b的整数数列可能有多少种呢?

【数据格式】

输入的第一行包含四个整数nsab,含义如前面说述。

输出一行,包含一个整数,表示满足条件的方案数。

由于这个数很大,请输出方案数除以100000007的余数。

例如,输入:

41023

程序应该输出:

2

【样例说明】

这两个数列分别是2413和741-2。

【数据规模与约定】

对于10%的数据,1<=n<=5,0<=s<=5,1<=a,b<=5;

对于30%的数据,1<=n<=30,0<=s<=30,1<=a,b<=30;

对于50%的数据,1<=n<=50,0<=s<=50,1<=a,b<=50;

对于70%的数据,1<=n<=100,0<=s<=500,1<=a,b<=50;

对于100%的数据,1<=n<=1000,-1,000,000,000<=s<=1,000,000,000,1<=a,b<=1,000,000。

资源约定:

峰值内存消耗<256M

CPU消耗<1000ms

 

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

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

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

注意:

main函数需要返回0

注意:

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

注意:

所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。

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

建议仔细阅读示例,不要想当然!

程序处理完一个用例的数据后,立即退出(return0),千万不要循环等待下一个用例的输入。

程序必须使用标准输入、标准输出,以便于机器评卷时重定向。

对于编程题目,要求选手给出的解答完全符合ANSIC++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

代码中允许使用STL类库。

注意:

main函数结尾需要return0

注意:

所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。

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

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

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

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

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

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