2014年蓝桥杯预赛本科B组C语言真题解析

上传人:新** 文档编号:507763507 上传时间:2023-04-18 格式:DOCX 页数:17 大小:73.47KB
返回 下载 相关 举报
2014年蓝桥杯预赛本科B组C语言真题解析_第1页
第1页 / 共17页
2014年蓝桥杯预赛本科B组C语言真题解析_第2页
第2页 / 共17页
2014年蓝桥杯预赛本科B组C语言真题解析_第3页
第3页 / 共17页
2014年蓝桥杯预赛本科B组C语言真题解析_第4页
第4页 / 共17页
2014年蓝桥杯预赛本科B组C语言真题解析_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《2014年蓝桥杯预赛本科B组C语言真题解析》由会员分享,可在线阅读,更多相关《2014年蓝桥杯预赛本科B组C语言真题解析(17页珍藏版)》请在金锄头文库上搜索。

1、2014年蓝桥杯(第5届)预赛本科B组真题解析啤酒和饮料啤酒每罐2.3 元,饮料每罐1.9 元。小明买了若干啤酒和饮料,一共花了82.3 元。 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。 注意:答案是一个整数。请通过浏览器提交答案。不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。(1) 答案。11(2) 编程思路。把啤酒、饮料的单价和总共花的钱都乘上 10,转换为整数。然后用循环对啤酒的罐数 b (lWb823/23)和饮料的罐数c (lWc823/19)进行穷举,找出满足要求的啤酒罐数b。(3) 源程序。#include int main()int b,c;

2、for (b=1;b35;b+)for (c=1;c45;c+)if(823=b*23+c*19) &(bc)printf(%dn,b);return 0;(4) 用单重循环完成穷举。实际上,也可以只对啤酒的罐数进行穷举。#include int main()int b,cSum;for (b=1;bb)printf(%dn,b);return 0;切面条一根高筋拉面,中间切一刀,可以得到2 根面条。如果先对折1 次,中间切一刀,可以得到3 根面条。如果连续对折2 次,中间切一刀,可以得到5根面条。 那么,连续对折10 次,中间切一刀,会得到多少面条呢? 答案是个整数,请通过浏览器提交答案。不

3、要填写任何多余的内容。(1)答案。1025(2)编程思路。 由题目可知,对折 0 次切一刀得到 2 根,对折 1 次切一刀得到 3 根,对折 2 次切一刀 得到 5 根。自己再尝试对折3 次切一刀,发现可以得到9 根。设Fi表示对折i次后中间切一刀得到的面条根数,则有Fi=2*Fi-l-l(il)。(3)源程序。#include int main()int fll=2,3,5;for (int i=3;i=l0;i+) fi=2*fi-l-l;printf(%dn,fl0);return 0;李白打酒话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边

4、走边唱: 无事街上走,提壶去打酒。逢店加一倍,遇花喝一斗。这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒 喝光了。请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为bo贝9: babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目 给出的)。注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。(1)答案。14(2) 编程思路。采用递归的方法生成15 位二进制数的排列,对每一种排列进行判断,看是否满足要求 遇到店 5 次、酒正好喝完、最后一次遇到的是花),满足条件输出对应字符串即可。(3)

5、源程序。#include int cnt=0;void dfs(int *a,int k)if (k=15)int alcohol,drinkery,i;alcohol=2; drinkery=0;for (i=0;i15;i+)if (ai=0)alcohol=2*alcohol;drinkery+;elsealcohol-;if (alcohol=0 & drinkery=5 & a14=1)for (i=0;i15;i+)if (ai=0) printf(a);else printf(b);printf(n);cnt+;return;ak=0;dfs(a,k+1);ak=1;dfs(a,

6、k+1);int main()int a15;dfs(a,0);printf(Count=%dn,cnt);return 0;(4) 程序优化。上面的程序中用二进制数0 表示遇到店,1 表示遇到花。实际上,可以直接定义一个字 符数组char a16,该数组的元素a0a14直接用字符a或b赋值,a15赋结束符 0。另外,通过递归产生15位二进制数的排列,共215=32768种情况,也就是上面的程序 搜索判断了32768种情况。实际上,由于满足问题的解是遇店5次,因此在某一搜索过程中 遇店达到6次,肯定不是问题的解,无需继续进行,可以实施剪枝。为了实施剪枝,需要在递归时记录酒的斗数和遇店的次数,可

7、以改写函数为 void dfs(char *a,int k,int alcohol,int drinkery),其中 alcohol 记录酒壶里酒的斗数,drinkery 记录遇店的次数。剪枝优化后的源程序如下:#include int cnt=0;void dfs(char *a,int k,int alcohol,int drinkery)if (k=15)if (alcohol=0 & drinkery=5 & a14=b)printf(%sn,a);cnt+;return;if (drinkery=0; i-)int r = strcmp(leveli, buf);if(r0) ret

8、urn i+1;while(r=0)p += 6;strncpy(buf,p,6);r = strcmp(leveli, buf);if(r 0) printf(%d, head);char* p = s;while(*p)int a = (*p-0);int x = (ge_wei(a) + jin_wei(p+1) % 10;printf(%d,x);p+;printf(n);int main()f(428571428571);f(34553834937543);return 0;注意:通过浏览器提交答案。只填写缺少的内容,不要填写任何多余的内容(例如:说 明性文字)(1) 参考答案。if

9、(r0) return i(2) 解析。levei就相当于满levei进i+1,因为填空所在的那段是判断条件为r=0的循环,所以 是在当前buff段与某个leve相等的情况下,看下一个buff段进位多少,那么r0 就是进位 i, r=0 就继续看下一段 buff。打印图形小明在X星球的城堡中发现了如下图形和文字:小明开动脑筋,编写了如下的程序,实现该图形的打印。#define N 70void f(char aN, int rank, int row, int col)if(rank=1) arowcol = *;return;int w = 1;int i; for(i=0; irank-1

10、; i+) w *= 2;f(a, rank-1, row+w/2, col); f(a, rank-1, row+w/2, col+w);int main()char aNN; int i,j;for(i=0;iN;i+) for(j=0;jN;j+) aij = ;f(a,6,0,0);for(i=0; iN; i+)for(j=0; jN; j+) printf(%c,aij); printf(n);return 0; 请仔细分析程序逻辑,填写缺失代码部分。通过浏览器提交答案。注意不要填写题目中已有的代码。也不要写任何多余内容(比如 说明性的文字)(1) 参考答案。f(a, rank-1, row, col+w/2);奇怪的分式上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:1/4 乘以 8/5小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图 1.png)X.18老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼! 对于分子、分母都是 19 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的)。 显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。 但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!注意:答案是个整数(考虑对称性,肯定是

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号