2014年第五届蓝桥杯预赛题目及答案
-
2014
年第五届蓝桥杯预赛题目
第一题
标题:啤酒和饮料
p>
啤酒每罐
2.3
元,饮料每罐
1.9
元。小明买了若干啤酒和饮料,一共花了
82
.3
元。
我们还
知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
注意:答案是一个整数。请通过浏览器提交答案。
不要书写任何多余的内容(例如:写了饮料的数量,添加说明
文字等)
。
第二题
标题:切面条
p>
一根高筋拉面,中间切一刀,可以得到
2
根
面条。
如果先对折
1
次,中间切一刀,可以得到
3
根面
条。
如果连续对折
2
次,中间切一刀,可以得到
5
根
面条。
那么,连续对折
< br>10
次,中间切一刀,会得到多少面条呢?
答案是个整数,请通过浏览器提交答案。不要填写任何多余的
内容。
第三题
标题:李白打酒
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒
2
斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
p>
这一路上,他一共遇到店
5
次,遇到花
p>
10
次,已知最后一次遇到的是花,他正好把酒
喝光了。
p>
请你计算李白遇到店和花的次序,
可以把遇店记为
< br>a
,
遇花记为
b
。
则:
babaabbabbabbbb
就是合理的次序。
像这样的答案一共有多少呢?请你计算出所有可能方案的
个数
(包含题目
给出的)
。
注意:通过浏览器提交答案。答案
是个整数。不要书写任何多余的内容。
第四题
标题:史丰收速算
p>
史丰收速算法的革命性贡献是:
从高位算起,
预测进位。
不需要九九表,彻底颠覆了传
统手算
!
速算的核心基础是:
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
请分析程序流程,填写划线部分缺少的代码。
2401
//
计算个位
int ge_wei(int a)
{
if(a % 2 == 0)
return (a * 2)
% 10;
else
return (a * 2 + 5) % 10;
}
//
计算进位
int jin_wei(char* p)
{
char* level[]
= {
};
char buf[7];
buf[6] = '0';
strncpy(buf,p,6);
int i;
for(i=5; i>=0; i--){
int r =
strcmp(level[i], buf);
if(r<0) return i+1;
while(r==0){
p += 6;
strncpy(buf,p,6);
r =
strcmp(level[i], buf);
if(r<0) return i+1;
______________________________;
}
}
return 0;
}
//
多位数乘以
7
void f(char* s)
{
int head =
jin_wei(s);
if(head > 0)
printf(
char* p = s;
while(*p){
int a = (*p-'0');
int x = (ge_wei(a) +
jin_wei(p+1)) % 10;
printf(
p++;
}
//
填空
printf(
}
int main()
{
f(
f(
return 0;
}
注意
:通过浏览器提交答案。只填写缺少的内容,不要填写任何多余的内容(例如:说明性
文
字)
第五题
标题:打印图形
p>
小明在
X
星球的城堡中发现了如下图形和文
字:
rank=3
rank=5
ran=6
小明开动脑筋,编写了如下的程序,实现该图形的打印。
#define N 70
void f(char a[][N], int rank, int row,
int col)
{
if(rank==1){
a[row][col] = '*';
return;
}
int w = 1;
int
i;
1 <
br>... 件,则这些宝贝就可以送给小明。 <
br>k <
br>...
1<=n<=100000 <
br>...
for(i=0; i
____________________________________________;
f(a, rank-1, row+w/2, col);
f(a, rank-1, row+w/2,
col+w);
}
int
main()
{
char
a[N][N];
int i,j;
for(i=0;i
for(j=0;j
f(a,6,0,0);
for(i=0; i
for(j=0; j
printf(
}
return 0;
}
请仔细分析程序逻辑,填写缺失代码部分。
通过浏览器提交答案。
注意不要填写
题目中已有的代码。
也不要写任何多余内容
(比如
说明性的文字)
第六题
标题:奇怪的分式
p>
上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:
1/4
乘以
8/5
小明居然把分子拼接在一起,分母
拼接在一起,答案是:
18/45
(参见图
)
老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!
对于分子、分母都是
1~9
中的一位数的情况,还有哪些算式可以这样计算呢?
请写出所有不同算式的个数(包括题中举例的)
。
显然,交换分子分母后,例如:
4/1
乘以
5/8
是满足要求的,这算做不同的算式。
但对于分子分母相同的情况,
2/2
乘以
3/3
这样的类型太多了,不在计数之列
!
注意:答案是个整数(考虑对称性,肯定是偶数)
。请通过浏览
器提交。不要书写多余的内
容。
第七题
标题:六角填数
p>
如图【
】所示六角形中,填入
1~12
的数字。
使得每条直线上的数字之和都相同。
p>
图中,已经替你填好了
3
个数字,请你计算
星号位置所代表的数字是多少?
请通过浏览器提交答案,不要填写多余的内容。
第八题
标题:蚂蚁感冒
p>
长
100
厘米的细长直杆子上有
n
只蚂蚁。它们的头有的朝左,有的朝右。
每只蚂蚁都只能沿着杆子向前爬,
速度是
1
厘米
/
秒。
当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。
这些蚂蚁中,
有
只蚂蚁感冒了。
并且在和其它蚂蚁碰面时,
会把感冒传染给碰到的蚂
蚁。
请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感
冒。
【数据格式】
第一行输入一个整数
n (1 < n < 50),
表示蚂蚁的总数。
p>
接着的一行是
n
个用空格分开的整数
Xi (-100 < Xi < 100), Xi
的绝对值,表示蚂蚁离开
杆子左边端点的距离。正值表示头朝右,
负值表示头朝左,数据中不会出现
0
值,
也不会出
现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了
。
要求输出
1
个整数,表示最后感冒蚂蚁的数目。
例如,输入:
3
5 -2 8
程序应输出:
1
再例如,输入:
5
-10 8 -20 12 25
程序应输出:
3
资源约定:
峰值内存消耗
< 256M
CPU
消耗
< 1000ms
请严格按要求输出,不要画蛇添足地打印类似:
“请您输入
”
的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意
:
main
函数需要返回
0
注意
:
只使用
ANSI C/ANSI C++
标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意
:
所有依赖的函数必须明确地在源文件中
#include
,
不能通过工程设置而省略
常用头文件。
提交时,注意选择所期望的编译器类型。
第九题
标题:地宫取宝
X
国王有一个地宫宝库。是
n x m
个格子的矩阵。每个格子放一件宝贝。每个宝贝贴
着价值标签。
地宫的入口在左上角,出口在右下角。
小明被带到地宫的入口,国王要求他只能向右或向下行走。
走过某个格子时,
如果那个格子中的
宝贝价值比小明手中任意宝贝价值都大,
小明就可
以拿起它(当
然,也可以不拿)
。
p>
当小明走到出口时,如果他手中的宝贝恰好是
k
p>
请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这
件宝贝。
【数据格式】
p>
输入一行
3
个整数,用空格分开:
n m k (1<=n,m<=50, 1<=k<=12)
接下来有
n
行数据,每行有
m
个整数
Ci
(0<=Ci<=12)
代表这个格子上的宝物的价值
要求输出一个整数,表示正好取
k<
/p>
个宝贝的行动方案数。该数字可能很大,输出它对
1000000007
取模的结果。
例如,输入:
2 2 2
1 2
2 1
程序应该输出:
2
再例如,输入:
2 3 2
1 2 3
2 1 5
程序应该输出:
14
资源约定:
峰值内存消耗
< 256M
CPU
消耗
< 1000ms
请严格按要求输出,不要画蛇添足地打印类似:
“请您输入
”
的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意
:
main
函数需要返回
0
注意
:
只使用
ANSI C/ANSI C++
标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意
:
所有依赖的函数必须明确地在源文件中
#include
,
不能通过工程设置而省略
常用头文件。
提交时,注意选择所期望的编译器类型。
第十题
标题:小朋友排队
n
个小朋友站成一排。
现在要把他们
按身高从低到高的顺序排列,
但是每次只能交换位
置相邻的两个
小朋友。
每个小
朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是
0
。
如果某
个小朋友第一次被要求交换,
则他的不高兴程度增加
1
,
如果第二次要求他交换,
则他的不高兴程度增
加
2
(即不高兴程度为
3
)
,
依次类推。
当要求某个
小朋友第
k
次交换时,
他的不高兴程度
增加
k
。
p>
请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。
如果有两个小朋友身高一样,则他
们谁站在谁前面是没有关系的。
【数据格式】
p>
输入的第一行包含一个整数
n
,表示小朋友
的个数。
第二行包含
n
个整数
H1 H2
„
Hn
,分别表示每个小朋友的身高。
p>
输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。
例如,输入:
3
3 2 1
程序应该输出:
9
【样例说明】
首先交
换身高为
3
和
2
的小朋友,再交换身高为
3
和
1
p>
的小朋友,再交换身高为
2
和
1
的小朋友,每个小朋友的不高兴程度都是
3
,总和为
9
。
【数据规模与约定】
对于<
/p>
10%
的数据,
1<=n<=10
;
p>
对于
30%
的数据,
1<=n<=1000
;
p>
对于
50%
的数据,
1<=n<=10000
;
p>
对于
100%
的数据,
,
0<=Hi<=100000
0
。
资源约定:
峰值内存消耗
< 256M
CPU
消耗
< 1000ms
请严格按要求输出,不要画蛇添足地打印类似:
“请您输入
”
的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意
:
main
函数需要返回
0
注意
:
只使用
ANSI C/ANSI C++
标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意
:
所有依赖的函数必须明确地在源文件中
#include
,
不能通过工程设置而省略
常用头文件。
提交时,注意选择所期望的编译器类型。
参考答案
1
#include
using namespace std;
int
main()
{
for(int i = 1;
i * 2.3 <= 82.3; i++)
for(int j = i + 1; i * 2.3
+ j * 1.9 <= 82.3; j++)
{
if(i * 2.3 + j * 1.9 >= 82.3 - 0.000001
&& i * 2.3 + j * 1.9 <=
82.3 +
0.000001)
}
2
#include
using
namespace std;
int main()
{
int num = 2;
}
printf(
return 0;
}
3
for(int i = 1; i <= 10; i++)
{
}
return 0;
num = num * 2 - 1;
printf(
#include
using namespace std;
int sum
= 0;
char str[100];
int
Fun(int now, int i, int a, int b)
{
if(now < 0 || i > 16 || (now == 0 && i
< 16))
return 0;
if(now == 0)
{
if(i == 16 && a
== 5 && b == 10)
{
sum++;
}
}
}
for(int j = 0; j < 15;
j++)
putchar(str[j]);
putchar(10);
str[i - 1] =
'a';
Fun(now * 2, i + 1, a + 1, b);
str[i - 1] = 'b';
Fun(now -
1, i + 1, a, b + 1);
int main()
{
}
4
#include
#include
//
计算个位
str[15] = '0';
Fun(2, 1, 0, 0);
printf(
return 0;
int ge_wei(int a)
{
if(a % 2 == 0)
return (a * 2) % 10;
else
return (a * 2 + 5) % 10;
}
//
计算进位
int jin_wei(char* p)
{
char*
level[]
{
char buf[7];
buf[6] = '0';
strncpy(buf,p,6);
int i;
for(i=5; i>=0; i--){
int r =
strcmp(level[i], buf);
if(r<0) return i+1;
= -
-
-