蓝桥杯c语言练习题.docx
- 文档编号:25531437
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:21
- 大小:20.86KB
蓝桥杯c语言练习题.docx
《蓝桥杯c语言练习题.docx》由会员分享,可在线阅读,更多相关《蓝桥杯c语言练习题.docx(21页珍藏版)》请在冰豆网上搜索。
蓝桥杯c语言练习题
蓝桥杯c语言练习题
精品文档
蓝桥杯c语言练习题
啤酒每罐2.3元,饮料每罐1.9元。
小明买了若干啤酒和饮料,一共花了82.3元。
我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
注意:
答案是一个整数。
请通过浏览器提交答案。
不要书写任何多余的内容。
标题2:
切面条
一根高筋拉面,中间切一刀,可以得到2根面条。
如果先对折1次,中间切一刀,可以得到3根面条。
如果连续对折2次,中间切一刀,可以得到5根面条。
那么,连续对折10次,中间切一刀,会得到多少面条呢,
答案是个整数,请通过浏览器提交答案。
不要填写任何多余的内容。
标题3:
李白打酒
话说大诗人李白,一生好饮。
幸好他从不开车。
一天,他提着酒壶,从家里出来,酒壶中有酒2斗。
他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
1/25
精品文档
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。
则:
babaabbabbabbbb就是合理的次序。
像这样的答案一共有多少呢,请你计算出所有可能方案的个数。
注意:
通过浏览器提交答案。
答案是个整数。
不要书写任何多余的内容。
标题4:
史丰收速算
史丰收速算法的革命性贡献是:
从高位算起,预测进位。
不需要九九表,彻底颠覆了传统手算!
速算的核心基础是:
1位数乘以多位数的乘法。
其中,乘以7是最复杂的,就以它为例。
因为,1/是个循环小数:
0.142857...,如果多位数超过142857...,就要进1
同理,2/7,/7,.../也都是类似的循环小数,多位数超过n/7,就要进n
下面的程序模拟了史丰收速算法中乘以7的运算过程。
乘以的个位规律是:
偶数乘以2,奇数乘以2再加5,都只取个位。
乘以的进位规律是:
2/25
精品文档
满142857...进1,
满85714...进2,
满28571...进3,
满71428...进4,
满14285...进5,
满57142...进6
请分析程序流程,填写划线部分缺少的代码。
//计算个位
intge_wei
{
if
return%10;
else
return%10;
}
//计算进位
intjin_wei
{
char*level[]={
“142857”,
“285714”,
“428571”,
3/25
精品文档
“571428”,
“714285”,
“857142”
};
charbuf[7];
buf[6]=‘\0’;
strncpy;
inti;
for{
intr=strcmp;
ifreturni+1;
while{
p+=;
strncpy;
r=strcmp;
ifreturni+1;
______________________________;
}
}
return0;
}
//多位数乘以7
4/25
精品文档
voidf
{
inthead=jin_wei;
ifprintf;
char*p=s;
while{
inta=;
intx=+jin_wei)%10;
printf;
p++;
}
//填空
printf;
}
intmain
{
f;
f;
return0;
}
注意:
通过浏览器提交答案。
只填写缺少的内容,不要填写任何多余的内容
5/25
精品文档
标题5:
打印图形
小明在X星球的城堡中发现了如下图形和文字:
rank=3
*
**
**
****
rank=5
*
**
**
****
**
****
****
********
**
****
****
********
****
********
6/25
精品文档
********
****************
ran=6
***************************
******************************************************
******************************************************
************************************
************************
************************************************
小明开动脑筋,编写了如下的程序,实现该图形的
打印。
#defineN0
voidf
{
if{
隔行变色
7/25
精品文档
Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。
小明设计的样式为:
第1行蓝色,第2行白色,第3行蓝色,第4行白色,....现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。
请你直接提交这个整数,千万不要填写任何多余的内容。
立方尾不变
有些数字的立方的末尾正好是该数字本身。
比如:
1,4,5,6,9,24,25,....
请你计算一下,在10000以内的数字中,符合这个特征的正整数一共有多少个。
请提交该整数,不要填写任何多余的内容。
三羊献瑞
观察下面的加法算式:
祥瑞生辉
+三羊献瑞
-------------------
三羊生瑞气
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
8/25
精品文档
请你填写“三羊献瑞”所代表的4位数字,不要填写任何多余内容。
格子中输出
StringInGrid函数会在一个指定大小的格子中打印指定的字符串。
要求字符串在水平、垂直两个方向上都居中。
如果字符串太长,就截断。
如果不能恰好居中,可以稍稍偏左或者偏上一点。
下面的程序实现这个逻辑,请填写划线部分缺少的代码。
#include
#include
voidStringInGrid
{
inti,k;
charbuf[1000];
strcpy;
if>width-2)buf[width-2]=0;
printf;
forprintf;
printf;
for/2;k++){
9/25
精品文档
printf;
forprintf;
printf;
}
printf;
printf;//填空
printf;
for/2+1;kprintf;
forprintf;
printf;
}
printf;
forprintf;
printf;
}
intmain
{
StringInGrid;
return0;
}
对于题目中数据,应该输出:
+------------------+
10/25
精品文档
||
|abcd123|
||
||
+------------------+
注意:
只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
串逐位和
给定一个由数字组成的字符串,我们希望得到它的各个数位的和。
比如:
“368”的诸位和是:
17
这本来很容易,但为了充分发挥计算机多核的优势,小明设计了如下的方案:
intf
{
intmid;
ifreturns[begin]-‘0’;
mid=/;
return____________________________________;
//填空
}
11/25
精品文档
intmain
{
chars[]=“4725873285783245723”;
printf));
return0;
}
你能读懂他的思路吗,请填写划线部分缺失的代码。
注意:
只填写缺少的部分,不要填写已有代码或任何多余内容。
奇妙的数字
小明发现了一个奇妙的数字。
它的平方和立方正好把0~9的10个数字每个用且只用了一次。
你能猜出这个数字是多少吗,
请填写该数字,不要填写任何多余的内容。
加法变乘法
我们都知道:
1+2+3+...+=1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+...+10*11+12+...+27*28+29+...+4=015
就是符合要求的答案。
12/25
精品文档
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交。
注意:
需要你提交的是一个整数,不要填写任何多余的内容。
#include
#include
intmain
{
inti,j;
for{
for{
if+i*==015)
printf;
}
}
system;
return0;
}
饮料换购
乐羊羊饮料厂正在举办一次促销优惠活动。
乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去。
13/25
精品文档
请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料。
输入:
一个整数n,表示开始购买的饮料数量
输出:
一个整数,表示实际得到的饮料数
例如:
用户输入:
100
程序应该输出:
149
用户输入:
101
程序应该输出:
151
资源约定:
峰值内存消耗CPU消耗请严格按要求输出,不要画蛇添足地打印类似:
“请您输入...”的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:
main函数需要返回0
注意:
只使用ANSIC/ANSIC++标准,不要调用依赖
14/25
精品文档
于编译环境或操作系统的特殊函数。
注意:
所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
打印大X
小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
为了便于比对空格,所有的空白位
置都以句点符来代替。
要求输入两个整数mn,表示笔的宽度,X的高度。
用空格分开
要求输出一个大X
2013蓝桥杯C语言本科组B
1、题目标题:
高斯日记
大数学家高斯有个好习惯:
无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:
4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。
这或许也是个好习惯,它时时刻刻提醒着主人:
日子又过去一天,还有多少时光可以用于浪费呢,
高斯出生于:
1777年4月30日。
15/25
精品文档
在高斯发现的一个重要定理的日记上标注着:
5343,因此可算出那天是:
1791年12月15日。
高斯获得博士学位的那天日记上标着:
8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:
yyyy-mm-dd,例如:
1980-03-21
答案:
1799-7-16
2、题目标题:
马虎的算式
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:
3x9=?
他却给抄成了:
39x=?
但结果却很戏剧性,他的答案竟然是对的~~
因为*9=9*=17820
类似这样的巧合情况可能还有很多,比如:
2*9=9*4
假设abcde代表1~9不同的5个数字
能满足形如:
ab*cde=adb*ce这样的算式一共有多少种呢,
答案:
142种
#include
intmain
{
inta,b,c,d,e;
16/25
精品文档
intsum=0;
for
for
for
for
for
if*==*&&a!
=b&&a!
=c&&a!
=d&&a!
=e&&b!
=c&&b!
=d&&b!
=e&&c
!
=d&&c!
=e&&d!
=e)
{
sum++;
printf;
}
printf;
}
请你利用计算机的优势寻找所有的可能,并回答不同
算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯
定是个偶数。
答案:
142种
#include
intmain
17/25
精品文档
{
inta,b,c,d,e;
intsum=0;
for
for
for
for
for
if*==*&&a!
=b&&a!
=c&&a!
=d&&a!
=e&&b!
=c&&b!
=d&&b!
=e&&c
!
=d&&c!
=e&&d!
=e)
{
sum++;
printf;
}
printf;
}
3、题目标题:
第39级台阶
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。
先迈左脚,
18/25
精品文档
然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。
那么,上完39级台阶,有多少种不同的上法呢,
请你利用计算机的优势,帮助小明寻找答案。
解答:
/有左右脚的限制,即第一步必须左脚,然后左右交替,最后一步必须是右脚。
即必须走偶数步。
#include
//有左右脚的限制。
constintN=39;
intf
{
if
return1;
return+f);//递归的关键在此,大规模逐渐转化为小规模。
}
intmain
{
intx=N/2,y;//x表示走两步的次数,y表示走一步的次数。
inti,sum=0;
for//为了保持偶数步,必须x每次递减2,而不
19/25
精品文档
是1;,x=0是针对偶数台阶。
{
y=N-2*x;
sum+=f;//求组合数;
}
coutreturn0;
}
//51167078种走法。
4、题目标题:
黄金连分数
黄金分割数0.61803...是个无理数,这个常数十分重要,在许多工程问题中会出现。
有时需要把这个数字求得很精确。
对于某些精密工程,常数的精度很重要。
也许你听说过哈勃太空望远镜,它首次升空后就发现了一处人工加工错误,对那样一个庞然大物,其实只是镜面加工时有比头发丝还细许多倍的一处错误而已,却使它成了“近视眼”!
!
言归正传,我们如何求得黄金分割数的尽可能精确的值呢,有许多方法。
比较简单的一种是用连分数:
1
黄金数=---------------------
1
20/25
精品文档
1+-----------------
1
1+-------------
1
1+---------
1+...
这个连分数计算的“层数”越多,它的值越接近黄金分割数。
请你利用这一特性,求出黄金分割数的足够精确值,要求四舍五入到小数点后100位。
小数点后3位的值为:
0.618
小数点后4位的值为:
0.6180
小数点后5位的值为:
0.61803
小数点后7位的值为:
0.6180340
你的任务是:
写出精确到小数点后100位精度的黄金分割值。
注意:
尾数的四舍五入~尾数是0也要保留~
答案:
至今不会,如果你做出来,给我发一下
5、题目标题:
前缀判断
如下的代码判断needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL。
21/25
精品文档
比如:
”abcd1234”就包含了“abc”为前缀
char*prefix
{
char*haystack=haystack_start;
char*needle=needle_start;
while{
if!
=*)returnNULL;//填空位置
}
ifreturnNULL;
returnhaystack_start;
}
答案:
#include
#include
char*prefix
{
char*haystack=haystack_start;
char*needle=needle_start;
while
{
if!
=*)returnNULL;//填空位置
}
22/25
精品文档
ifreturnNULL;
returnhaystack_start;
}
intmain
{
char
needle_start[100]={“abc”},haystack_start[100]={“
abc123”};
if)
coutelse
coutreturn0;
}
6、题目标题:
三部排序
一般的排序有许多经典算法,如快速排序、希尔排序等。
但实际应用时,经常会或多或少有一些特殊的要求。
我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。
比如,对一个整型数组中的数字进行分类排序:
使得负数都靠左端,正数都靠右端,0在中部。
注意问题的特点是:
负数区域和正数区域内并不要求有序。
可以利用这个特点通过1次线性扫描就结束战斗!
!
23/25
精品文档
以下的程序实现了该目标。
其中x指向待排序的整型数组,len是数组的长度。
voidsort3p
{
intp=0;
intleft=0;
intright=len-1;
while{
if{
intt=x[left];
x[left]=x[p];
x[p]=t;
left++;
p++;
}
elseif{
intt=x[right];
x[right]=x[p];
x[p]=t;
right--;
}
else{
24/25
精品文档
P++;//填空位置
25/25
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蓝桥杯 语言 练习题