2011-2014蓝桥杯预赛递归算法题目及部分答案.docx

2011-2014蓝桥杯预赛递归算法题目及部分答案.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2011-2014蓝桥杯预赛递归算法题目及部分答案

2014预赛第三题标题:李白打酒话说大诗人李白,一生好饮。幸好他从不开车。一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:无事街上走,提壶去打酒。逢店加一倍,遇花喝一斗。这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。#include cstdiousing namespace std;int sum = 0;charstr[100];int Fun(int now, inti, 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(){str[15] = \0;Fun(2, 1, 0, 0);printf(sum = %d\n, sum);return 0;}2013预赛3: 第39级台阶(满分8分)小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!站在台阶前,他突然又想着一个问题:如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?请你利用计算机的优势,帮助小明寻找答案。解答:/有左右脚的限制,即第一步必须左脚,然后左右交替,最后一步必须是右脚。即必须走偶数步。#includeiostream.h//有左右脚的限制。constint N=39;int f(intm,int n){if(m==0||n==0)return 1;return(f(m-1,n)+f(m,n-1));//递归的关键在此,大规模逐渐转化为小规模。}int main(){int x=N/2,y;//x表示走两步的次数,y表示走一步的次数。inti,sum=0;for(i=x;x=0;x-=2)//为了保持偶数步,必须x每次递减2,而不是1;(x要x=0,不能x0),x=0是针对偶数台阶。{y=N-2*x;sum+=f(x,y);//求组合数;}cout共有 sum种走法。endl;return 0;}/走法。2012预赛4:某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。每位选手都有一个起步的分数为10分。某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011就是可能的情况。你的任务是算出所有可能情况。每个答案占一行。2011预赛9.?程序设计(满分16分)公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。程序输入:第一行是一个整数m,代表可购买的商品的种类数。接下来是m个整数,每个1行,分别代表这m种商品的单价。程序输出:第一行是一个整数,表示共有多少种方案第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。例如:输入:2200300则应输出:22??25??0输入:2500800则应输出:12??0?//预赛NO.9题#include stdio.hintsln;//方案的个数int gm;//商品的种类int price[1000];//各种商品价钱int count[1000];//各种商品的个数int method[1000][1000];//每种解决方案中各商品的个数int cost;//当前花费void output()//输出解决方案{inti,j;printf(%d\n,sln);for (i=0; isln; i++) {for (j=0;jgm;j++)printf(%3d,m

您可能关注的文档

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档