




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2014年第五届蓝桥杯预赛题目第一题标题:啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。 注意:答案是一个整数。请通过浏览器提交答案。不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。第二题标题:切面条 一根高筋拉面,中间切一刀,可以得到2根面条。 如果先对折1次,中间切一刀,可以得到3根面条。 如果连续对折2次,中间切一刀,可以得到5根面条。 那么,连续对折10次,中间切一刀,会得到多少面条呢?答案是个整数,请通过浏览器提交答案。不要填写任何多余的内容。第三题标题:李白打酒 话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。第四题标题:史丰收速算 史丰收速算法的革命性贡献是:从高位算起,预测进位。不需要九九表,彻底颠覆了传统手算! 速算的核心基础是: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 请分析程序流程,填写划线部分缺少的代码。241876844562801/计算个位 int ge_wei(int a)if(a % 2 = 0)return (a * 2) % 10;elsereturn (a * 2 + 5) % 10;/计算进位 int jin_wei(char* p)char* level = 142857,285714,428571,571428,714285,857142;char buf7;buf6 = 0;strncpy(buf,p,6);int i;for(i=5; i=0; i-)int r = strcmp(leveli, buf);if(r0) return 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;注意:通过浏览器提交答案。只填写缺少的内容,不要填写任何多余的内容(例如:说明性文字)第五题标题:打印图形 小明在X星球的城堡中发现了如下图形和文字:rank=3 rank=5ran=6 小明开动脑筋,编写了如下的程序,实现该图形的打印。#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; 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/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼! 对于分子、分母都是 19 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的)。 显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。 但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。第七题标题:六角填数 如图【1.png】所示六角形中,填入112的数字。 使得每条直线上的数字之和都相同。 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?请通过浏览器提交答案,不要填写多余的内容。第八题标题:蚂蚁感冒 长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。【数据格式】 第一行输入一个整数n (1 n 50), 表示蚂蚁的总数。 接着的一行是n个用空格分开的整数 Xi (-100 Xi 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。 要求输出1个整数,表示最后感冒蚂蚁的数目。例如,输入:35 -2 8程序应输出:1再例如,输入:5-10 8 -20 12 25程序应输出:3资源约定:峰值内存消耗 256MCPU消耗 1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入.” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意: main函数需要返回0注意: 只使用ANSI C/ANSI C+ 标准,不要调用依赖于编译环境或操作系统的特殊函数。注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。提交时,注意选择所期望的编译器类型。第九题标题:地宫取宝 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 地宫的入口在左上角,出口在右下角。 小明被带到地宫的入口,国王要求他只能向右或向下行走。 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。 请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。【数据格式】 输入一行3个整数,用空格分开:n m k (1=n,m=50, 1=k=12) 接下来有 n 行数据,每行有 m 个整数 Ci (0=Ci=12)代表这个格子上的宝物的价值 要求输出一个整数,表示正好取k个宝贝的行动方案数。该数字可能很大,输出它对 1000000007 取模的结果。例如,输入:2 2 21 22 1程序应该输出:2再例如,输入:2 3 21 2 32 1 5程序应该输出:14资源约定:峰值内存消耗 256MCPU消耗 1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入.” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意: main函数需要返回0注意: 只使用ANSI C/ANSI C+ 标准,不要调用依赖于编译环境或操作系统的特殊函数。注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。提交时,注意选择所期望的编译器类型。第十题标题:小朋友排队 n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。 每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。 如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。 请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。 如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。【数据格式】 输入的第一行包含一个整数n,表示小朋友的个数。 第二行包含 n 个整数 H1 H2 Hn,分别表示每个小朋友的身高。 输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。例如,输入:33 2 1程序应该输出:9【样例说明】 首先交换身高为3和2的小朋友,再交换身高为3和1的小朋友,再交换身高为2和1的小朋友,每个小朋友的不高兴程度都是3,总和为9。【数据规模与约定】 对于10%的数据, 1=n=10; 对于30%的数据, 1=n=1000; 对于50%的数据, 1=n=10000; 对于100%的数据,1=n=100000,0=Hi=1000000。资源约定:峰值内存消耗 256MCPU消耗 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 - 0.000001 & i * 2.3 + j * 1.9 = 82.3 + 0.000001)printf(%d %dn, i, j);return 0;2,切面条#include using namespace std;int main()int num = 2;for(int i = 1; i = 10; i+)num = num * 2 - 1;printf(%d: %dn, i, num);return 0;3,李白打酒#include using namespace std;int sum = 0;char str100;int Fun(int now, int i, int a, int b)if(now 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(strj);putchar(10);stri - 1 = a;Fun(now * 2, i + 1, a + 1, b);stri - 1 = b;Fun(now - 1, i + 1, a, b + 1);int main()str15 = 0;Fun(2, 1, 0, 0);printf(sum = %dn, sum);return 0;4 史丰收速算#include #include /计算个位 int ge_wei(int a)if(a % 2 = 0)return (a * 2) % 10;elsereturn (a * 2 + 5) % 10;/计算进位 int jin_wei(char* p)char* level = 142857,285714,428571,571428,714285,857142;char buf7;buf6 = 0;strncpy(buf,p,6);int i;for(i=5; i=0; i-)int r = strcmp(leveli, buf);if(r0) return 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(142857);f(142857142856);return 0;5,打印图形#include #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; i+) w *= 2;f(a, rank - 1, row, col + 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;6,奇怪的分式解题思路:将该问题抽象为a/b c/d = (a*10+c)/(b*10+d)并且a,b,c,d是19中的数字,并且a!=b,c!=d。然后通过四层循环遍历出a,b,c,d所有可能的情况,然后对每一种情况进行判断。#include using namespace std;int sum = 0;int main()for(int a = 1; a = 9; a+)for(int b = 1; b = 9; b+)for(int c = 1; c = 9; c+)for(int d = 1; d = na * 1.0 / nb - 0.000001 & a * 1.0 / b * c * 1.0 / d = na * 1.0 / nb + 0.000001)printf(%d/%d * %d/%d = %d/%dn, a, b, c, d, na, nb);sum+;printf(sum = %d, sum);return 0;7,六角填数解题思路:图中的六角形中一共是12个数字,我们不妨就按照从上到下,从左到右的顺序为这12个节点进行编号。然后我们继续进行分析,该图形一共有5条线,我们只需要让对应线上的元素的和相同即可。我们使用数组保存112个节点的数值,通过递归的形式遍历出所有的可能,然后最后对结果进行判断。输出结果为10;注释部分可以输出第1个节点到第12个节点的的数值:1 8 9 2 7 10 12 6 5 4 11 3一些说明:注意在main函数中,语句a13=3,1,8 表示a1=1,a2=8,而a0=3就是a12的值;a0的作用体现在check函数中,通过比较,可以使a1a11中的所有的节点取值都不为3,我们还注意到当num=12的时候,没有在对其进行check,因为前面已经通过a0的限制保证了前面的11个节点都不会取到3.#includeusing namespace std;bool check(int *a,int num)/用于检验anum时候与前面的元素是否有相同的值 for(int i=num-1;i=0;i-) if(ai=anum)return false; return true;bool final_check(int *a)/用于检验是否所有直线上的和相等 int r1 = a2+a3+a4+a5; int r2 = a8+a9+a10+a11; int r3 = a1+a3+a6+a8; int r4 = a1+a4+a7+a11; int r5 = a5+a7+a10+a12; if(r1=r2&r2=r3&r3=r4&r4=r5) return true; else return false; /void show(int *a)/int i=1;/while(i13)coutai+ ;/coutendl;/void fun(int *a,int num) if(num=12) anum = 3; if(final_check(a) /show(a); couta6endl; return; for(int i=2;i13;i+) anum = i; if(check(a,num) fun(a,num+1); int main() int a13=3,1,8; fun(a,3); return 0;最后得出的答案是:108,蚂蚁感冒解题思路首先明白两只蚂蚁碰撞之后掉头和穿行过去是一样的,可以把穿行看做碰撞后掉头了,然后两个蚂蚁交换了,而是哪一只蚂蚁对结果不影响。那么,假如第一只感冒蚂蚁向右走,那么碰到所有想左走的都会被感染,而感染后的蚂蚁必定是向左走的,那么他会把左边向右走的都感染了。向左走的也是这样。所以 ans = 左边向右走的 + 右边向左走的 + 1(本身)。当然还有特殊情况,第一只感染的向右走,右边的都在向右走,那么速度一样的话它不会感染其他所有,所以 ans = 1,相反也是。#include #include using namespace std; struct Node int x; int dis; int num; ; Node a100; int comp(Node a1,Node a2) if(a1.x!=a2.x) return a1.xa2.x; int main() int n,x; while(scanf(%d,&n) for(int i=0;in;i+) scanf(%d,&x); ai.dis=x0?-1:1; ai.x=abs(x); ai.num=i+1; sort(a,a+n,comp); /排序 int tmp=0,left=0,right=0,ans=0; for(i=0;in;i+) /左边向右走的 if(ai.num=1) tmp=i;break; if(ai.dis=1) left+; for( i=tmp+1;in;i+) /右边向左走的 if(ai.dis=-1) right+; if(atmp.dis=1 & right=0 | atmp.dis=-1 & left=0) ans=1; else ans=left+right+1; printf(%dn,ans); return 0; 方法2#include #include using namespace std;struct Tint drec, flag;T arr100;int size = 0;int main()int n, t;scanf(%d, &n);for(int i = 0; i 0)for(int i = 0; i 0)arri.drec += 1;elsearri.drec += 1;if(abs(arri.drec) 100)nowHave-;for(int i = 0; i size; i+)for(int j = i + 1; j size; j+)if(abs(arrj.drec) = abs(arri.drec)if(arri.flag = 1 | arrj.flag = 1)if(arri.flag + arrj.flag = 1)sum+;arri.flag = arrj.flag = 1;arrj.drec = 0 - arrj.drec;arri.drec = 0 - arri.drec;printf(%d, sum);return 0;9地宫取宝#include #include #include #include using namespace std;int map5555;int n, m, k, sum = 0;int DFS(int x, int y, int big, int nowHave)if(nowHave k)return 0;if(x = n & y = m)if(nowHave = k | nowHave = k - 1 & mapnm big)sum+;sum %= 1000000007;if(x + 1 big)DFS(x + 1, y, mapxy, nowHave + 1);DFS(x + 1, y, big, nowHave);if(y + 1 big)DFS(x, y + 1, mapxy, nowHave + 1);DFS(x, y + 1, big, nowHave);int main()scanf(%d%d%d, &n, &m, &k);for(int i = 1; i = n; i+)for(int j = 1; j = m; j+)scanf(%d, &mapij);DFS(1, 1, 0, 0);printf(%d, sum);return 0;方法2#include const int I=1000000007;int n,m,k,ans=0;int map5252,a5252;void fun(int i,int j,int maxv,int count)if(in|jm)&(i+j!=m+n+1)|countk) return;if(i+j=m+n+1)if(count=k)ans+;if(ansI)ans%=I; return;if(mapijmaxv)/当前价值比最大的大,可以拿 aij=1;fun(i+1,j,mapij,count+1);fun(i,j+1,mapij,count+1);aij=0;fun(i+1,j,maxv,count);fun(i,j+1,maxv,count);/不拿 int main()scanf(%d%d%d,&n,&m,&k);int i,j;for(i=1;i=n;i+)for(j=1;j=m;j+)scanf(%d,&mapij);aij=0;fun(1,1,-1,0);printf(%dn,ans/2);return 0;方法3#include #include #define N 1000000007 int n,m,k; int map5050; int vis50501515;/vis数组中记录的是状态 xy坐标 拥有宝物数量 拥有宝物的最大值(这4个可以详尽唯一的描述没一种可能) / 如 vis3456=7 即当在map34且身上有5件宝物 宝物的最大值是6 是到达终点有7中路径 int dfs(int x,int y,int num,int max)/当前位置 拥有宝物的数量 拥有的宝物的最大值 if (visxynummax+1!=-1)/因为宝物有可能为0所以定义max时用最小值-1 这就导致无法作为下标使用 实际上如果测试数据中宝物价值没有0 将所有的+1 去掉也是可以的 return visxynummax+1; /记忆化的记忆就指的是上面 if(x=n&y=m) if(num=k)return visxynummax+1=1;/满足条件 当前点到目标有1种方案 else if(num=k-1&maxmapxy)return visxynummax+1=1;/同样满足条件 当前点到目标有1种方案
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit 10 Lesson 58 Ms. Lius Speech 课件 冀教版九年级英语下册
- 科学种植向日葵课件
- 科学知识培训会总结报告课件
- 有效沟通培训课件
- 营销团队绩效考核模板
- 药厂QC6S管理课件
- 企业年度经营计划制定工具战略规划与目标管理版
- 漂流作文500字13篇
- 高一英语语法专题讲座
- 企业员工绩效评价标准模板
- 电工复审培训课件
- 2025新《安全生产法》知识考试题库及答案
- 2025年苏教版(2024)小学科学一年级上册(全册)教学设计(附目录 P137)
- 《铁路运输安全管理》课件-第一章 铁路运输安全管理概述
- 高频变压器项目商业模式分析报告
- 杜邦安全培训课件
- 中职生开学第一课安全教育
- 16949工程变更课件
- 国宝文物运送活动方案
- 2024年德州市第二人民医院招聘备案制工作人员笔试真题
- 多重耐药菌感染防控与管理
评论
0/150
提交评论