2014第五届蓝桥杯C-C++本科B组试题及答案
-
2014
第五届蓝桥杯
C/C++
本科
B
组试题及答案
1.
标题:啤酒和饮料
啤酒每罐
2.3
元,饮料每罐
1.9
元。小明买了若干啤酒和饮料,
一共花了
82.3
元。
我们还知道他买的啤酒比饮料的数量少,请你计算他买
了几罐啤酒。
注意:答案是一个整数。请通过浏览器提交答案。
解答:
#include
int
main()
{
int
x,y;
double
m=0;
for(x=0,y=42;x<35 || x>y;)
{
y =
(int)(82.3-2.3*x)/1.9;
m=
2.3*x+1.9*y;
if(m==82.3)
break;
x = x+1;
y =
y-2;
}
printf(
return
0;
}
2.
标题:切面条
一根高筋拉面,中间切一刀,可以得到
2
根面条。
如果先对折
1
次,中间切一刀,可以得到
p>
3
根面条。
如果连续对折
2
次,中间切一刀,可以
得到
5
根面条。
那么,连续对折
10
次,中间切一刀,会得到多少面条呢?
答案是
个整数,请通过浏览器提交答案。不要填写任何多余的内容。
解答:
#include
#include
int
main()
{
printf
(
pow
( 2.0 ,10.0 ) + 1);
return
0;
}
3
.标题:李白打酒
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒
2
斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店
5
次,遇到花
10
次,已知最后一次遇到的是花,他正好把酒喝光
了。
请你计
算李白遇到店和花的次序,可以把遇店记为
a
,遇花记为
b
。则:
babaabbabbabbb
p>
b
就是合理的次序。像这样的答案一共有多少呢?请你计算出所有
可能方案的个数(包含题目
给出的)。
注意:通过浏览器提交答案。答案是个整数。不要书写
任何多余的内容。
解答:
#include
int
sum=0;
int
f(int
a,int
b,int
c){
if(a>0)
f(a-1,b,c*2);
if(b>0)
f(a,b-1,c-1);
if(a==0&&b==0&&c==1)
sum=sum+1;
return
sum;
}
int
main(){
f(5,9,2);
printf(
}
4.
标题:史丰收速算
史丰收速算法的革命性贡献是:从高位算起,预测进位
。不需要九九表,
彻底颠覆了传统手
算
!
速算的核心基础是:
1<
/p>
位数乘以多位数的乘法。
p>
其中,乘以
7
是最复杂的,就以它为例。<
/p>
因为,
1/7
是个循环小数:
0.142857...
,如果多位数超过
142857...
,就要进
1
同理,
2/7, 3/7, ... 6/7
也都是类似的循环小数,多位数超过
n/7
,就要进
n
下面的程序模拟了史丰收速算法中乘以
7
的运算
过程。
乘以
7
的个位规律是:偶数乘以<
/p>
2
,奇数乘以
2
再加
5
,都只取个位。
乘以
7
的进位规律是:
满
142857...
进
1,
满
285714...
进
2,
满
428571...
进
3,
满
571428...
进
4,
满
714285...
进
5,
满
857142...
进
6
请分析程序流程,填写划线部分缺少的代码。
2401
//
计算个位
int ge_wei(int a)
{
}
//
计算进位
int jin_wei(char* p)
{
if(a % 2 == 0)
else
return (a *
2 + 5) % 10;
return (a * 2)
% 10;
}
char* level[]
= {
};
char buf[7];
buf[6] = '0';
strncpy(buf,p,6);
int i;
for(i=5; i>=0; i--){
}
return 0;
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;
______________________________;
//
填空
<
/p>
//
多位数乘以
7
void
f(char* s)
{
}
int main()
{
}
注意
:
通过浏览器提交答案。
只填写缺少的内容,
< br>不要填写任何多余的内容
(例如:
说明性文字)
f(
f(
return 0;
int head =
jin_wei(s);
if(head > 0)
printf(
char* p = s;
while(*p){
}
printf(
int a = (*p-'0');
int x = (ge_wei(a) + jin_wei(p+1)) %
10;
printf(
p++;
解答:
if(r>0)return
i;
5.
标题:打印图形
小明在
X
星球的城堡中发现了如下图形和文字:
rank=3
*
* *
*
*
* * * *
rank=5
*
* *
* *
* * * *
* *
* * * *
* * * *
* * * * * * * *
* *
* * * *
* * * *
* * * * * * * *
* * * *
* * * * * * * *
* * * * * * * *
* * * * * * * * * * * * * * * *
ran=6
*
* *
* *
* * * *
* *
* * * *
* * * *
* * * * * * * *
*
*
* * * *
* * *
*
* * * * * * * *
* * *
*
* * * * * * * *
* * * * * *
* *
* * * * * * * * * * * * * * * *
*
*
*
* * *
* *
* *
*
* * * * * * *
* *
* *
*
* * * * * * *
* * * *
* * * *
*
* * * * * * * * * * * * * * *
* *
* *
*
* * * * * * *
* * * * *
* * *
* * *
* * * * * * * * * * * * *
* * * * *
* * *
* * *
* * * * * * * * * * * * *
* * * * * * * * * *
* * * * * *
* * * * *
* * * * * * * * * * * * * * * * * * * * * * * * *
* *
小明开动脑筋,编写了如下的程序,实现该图形的打印。
#define N 70
void f(char
a[][N], int rank, int row, int col)
{
}
int main()
{
}
请仔细分析程序逻辑,填写缺失代码部分。
通过浏览器提交答案。
注意不
要填写题目中已有的代码。
也不要写任何多余内容
(比如说明<
/p>
性的文字)
char
a[N][N];
int i,j;
for(i=0;i
for(j=0;j
}
return 0;
f(a,6,0,0);
for(i=0; i
for(j=0; j
printf(
if(rank==1){
}
int w = 1;
int i;
for(i=0; i
____________________________________________;
f(a, rank-1, row+w/2, col);
f(a, rank-1, row+w/2, col+w);
a[row][col] = '*';
return;
解答:
-
-
-
-
-