蓝桥杯部分题目含答案文档格式.docx
- 文档编号:20044856
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:22
- 大小:24.62KB
蓝桥杯部分题目含答案文档格式.docx
《蓝桥杯部分题目含答案文档格式.docx》由会员分享,可在线阅读,更多相关《蓝桥杯部分题目含答案文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
它们的头有的朝左,有的朝右。
每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。
当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。
这些蚂蚁中,有1只蚂蚁感冒了。
并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。
请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。
【数据格式】
第一行输入一个整数n(1<
n<
50),表示蚂蚁的总数。
接着的一行是n个用空格分开的整数Xi(-100<
Xi<
100),Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。
正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。
其中,第一个数据代表的蚂蚁感冒了。
要求输出1个整数,表示最后感冒蚂蚁的数目。
例如,输入:
3
5-28
程序应输出:
1
再例如,输入:
-108-201225
资源约定:
峰值内存消耗<
256M
CPU消耗<
1000ms
请严格按要求输出,不要画蛇添足地打印类似:
“请您输入...”的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:
main函数需要返回0
只使用ANSIC/ANSIC++标准,不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中#include<
xxx>
,不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
vector"
structlocation{
intdir;
intvalue;
intstate;
};
structlocationloc[55];
boolcmp(structlocationa,structlocationb){
if(a.value<
b.value){
returntrue;
}else{
returnfalse;
}
intn,i,tmp;
scanf("
%d"
for(i=0;
i<
n;
i++){
scanf("
tmp);
if(i==0)loc[i].state=1;
elseloc[i].state=0;
if(tmp>
0){
loc[i].dir=1;
loc[i].value=tmp;
}else{
loc[i].dir=-1;
loc[i].value=-tmp;
}
sort(loc,loc+n,cmp);
//for(i=0;
i++)printf("
%d%d%d\n"
loc[i].value,loc[i].dir,loc[i].state);
intflag=1;
while(flag){
flag=0;
for(i=0;
n-1;
if(loc[i].dir==1&
&
loc[i+1].dir==-1){
loc[i].dir=-1;
loc[i+1].dir=1;
if(loc[i].state==1||loc[i+1].state==1){
loc[i].state=1;
loc[i+1].state=1;
flag=1;
//printf("
%d%d\n"
loc[i].value,loc[i+1].value);
}
}
intcount=0;
if(loc[i].state==1)count++;
printf("
count);
return0;
3.地宫取宝
递归,记忆搜索,dfs,蓝桥杯
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
cstring"
#defineN1000000007
inta[55][55];
intd[55][55][15][15];
intn,m,k;
intf(intx,inty,intnum,intmaxValue){
if(d[x][y][num][maxValue+1]!
=-1)returnd[x][y][num][maxValue+1];
//记忆搜索
intt=0;
if(x==n-1&
y==m-1){//初始条件
if(a[x][y]>
maxValue){
if(num==k||num==k-1)t++;
if(num==k)t++;
d[x][y][num][maxValue+1]=t;
returnt;
if(x<
n-1){
t+=f(x+1,y,num,maxValue);
t%=N;
t+=f(x+1,y,num+1,a[x][y]);
if(y<
m-1){
t+=f(x,y+1,num,maxValue);
t+=f(x,y+1,num+1,a[x][y]);
d[x][y][num][maxValue+1]=t;
returnt;
inti,j;
%d%d%d"
n,&
k);
for(j=0;
j<
m;
j++){
scanf("
a[i][j]);
memset(d,-1,sizeof(d));
//printf("
d[0][0][0][0]);
d[0][0][0][0]=f(0,0,0,-1);
4、
数字三角形
(图3.1-1)示出了一个数字三角形。
请编一个程序计算从顶至底的某处的一条路
径,使该路径所经过的数字的总和最大。
●每一步可沿左斜线向下或右斜线向下走;
●1<三角形行数≤100;
●三角形中的数字为整数0,1,…99;
.
(图3.1-1)
文件中首先读到的是三角形的行数。
接下来描述整个三角形
最大总和(整数)
7
38
810
2744
45265
30
5、带分数
枚举所有1-9组成的序列,考虑每个序列是否可以。
考虑dfs产生序列
100可以表示为带分数的形式:
100=3+69258/714。
还可以表示为:
100=82+3546/197。
注意特征:
带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100有11种表示法。
从标准输入读入一个正整数N(N<
1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:
不要求输出每个表示,只统计有多少表示法!
样例输入1
100
样例输出1
11
样例输入2
105
样例输出2
6
intN,count=0,t=0;
voidequal(int*a);
inti;
N);
inta[10];
a[0]=0;
for(a[1]=1;
a[1]<
=9;
a[1]++){
for(a[2]=1;
a[2]<
a[2]++){
if(a[2]!
=a[1]){
for(a[3]=1;
a[3]<
a[3]++){
if(a[3]!
=a[1]&
a[3]!
=a[2]){
for(a[4]=1;
a[4]<
a[4]++){
if(a[4]!
a[4]!
=a[2]&
=a[3]){
for(a[5]=1;
a[5]<
a[5]++){
if(a[5]!
a[5]!
=a[3]&
=a[4]){
for(a[6]=1;
a[6]<
a[6]++){
if(a[6]!
a[6]!
=a[4]&
=a[5]){
for(a[7]=1;
a[7]<
a[7]++){
if(a[7]!
a[7]!
=a[5]&
=a[6]){
for(a[8]=1;
a[8]<
a[8]++){
if(a[8]!
a[8]!
=a[6]&
=a[7]){
for(a[9]=1;
a[9]<
a[9]++){
if(a[9]!
a[9]!
=a[7]&
=a[8]){
//for(i=1;
//printf("
a[i]);
//}
//printf("
\n"
);
equal(a);
}
}
}
}
}
}
}
}
}
}
}
}
}
voidequal(int*a){
inti,j,k,b,c,d;
for(i=1;
=6;
for(j=i+1;
=8;
d=0;
b=0;
c=0;
for(k=1;
k<
=i;
k++){
//b+=a[k]*pow(10,i-k);
b=b*10+a[k];
for(k=i+1;
=j;
//c+=a[k]*pow(10,j-k);
c=c*10+a[k];
for(k=j+1;
//d+=a[k]*pow(10,9-k);
d=d*10+a[k];
//if(t<
10){
//printf("
%d+%d/%d\n"
b,c,d);
//t++;
//}
if((b+1.0*c/d)==N){
count++;
//printf("
6、错误票据
读取一行字符串,getline(cin,s),s为string.
某涉密单位下发了某种票据,并要在年终全部收回。
每张票据有唯一的ID号。
全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。
因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。
你的任务是通过编程,找出断号的ID和重号的ID。
假设断号不可能发生在最大和最小号。
要求程序首先输入一个整数N(N<
100)表示后面数据行数。
接着读入N行数据。
每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000),请注意行内和行末可能有多余的空格,你的程序需要能处理这些空格。
每个整数代表一个ID号。
要求程序输出1行,含两个整数mn,用空格分隔。
其中,m表示断号ID,n表示重号ID
568119
10129
79
164178108109180155141159104182179118137184115124125129168196
172189127107112192103131133169158
128102110148139157140195197
185152135106123173122136174191145116151143175120161134162190
149138142146199126165156153193144166170121171132101194187188
113130176154177120117150114183186181100163160167147198111119
105120
string"
strings;
inta[10005];
intN;
inti,j,k=0,len,number;
getchar();
=N;
getline(cin,s);
//cout<
<
s;
len=s.length();
number=0;
len;
){
if(s[j]=='
'
a[k]=number;
number=0;
k++;
j++;
while(s[j]=='
)j++;
}else{
number=number*10+s[j]-'
0'
;
if(j==len-1){
a[k]=number;
k++;
}
//for(i=0;
k;
i++)
//printf("
sort(a,a+k);
intans1,ans2;
a[i];
if(a[i]==a[i-1])ans2=a[i];
if(a[i]==a[i-1]+2)ans1=a[i]-1;
ans1,ans2);
}
7、连号区间数
小明这些天一直在思考这样一个奇怪而有趣的问题:
在1~N的某个全排列中有多少个连号区间呢?
这里所说的连号区间的定义是:
如果区间[L,R]里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,则称这个区间连号区间。
当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助。
第一行是一个正整数N(1<
=N<
=50000),表示全排列的规模。
第二行是N个不同的数字Pi(1<
=Pi<
=N),表示这N个数字的某一全排列。
输出一个整数,表示不同连号区间的数目。
4
3241
34251
9
inta[50005];
intcount=0;
intmin=50005,max=0;
N;
i++)scanf("
a[i]);
min=50005;
max=0;
for(j=i;
if(a[j]>
max)max=a[j];
if(a[j]<
min)min=a[j];
if(max-min==j-i)count++;
%d,%d\n"
i,count);
8、买不到的数目
动态规划
小明开了一家糖果店。
他别出心裁:
把水果糖包成4颗一包和7颗一包的两种。
糖果不能拆包卖。
小朋友来买糖的时候,他就用这两种包装来组合。
当然有些糖果数目是无法组合出来的,比如要买10颗糖。
你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。
大于17的任何数字都可以用4和7组合出来。
本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
两个正整数,表示每种包装中糖的颗数(都不多于1000)
一个正整数,表示最大不能买到的糖数
47
17
35
intflag[1005000];
intdp[1001][1002];
intm,n;
m*n;
i++)flag[i]=0;
for(j=0;
=n;
j++){
dp[0][j]=j*m;
flag[j*m]=1;
=m;
i++){
dp[i][0]=i*n;
flag[i*n]=1;
for(j=1;
=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蓝桥杯 部分 题目 答案