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

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

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2014 预赛第三题 标题:李白打酒 话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒 2 斗。他边 边 唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,他一共遇到店 5 次,遇到花 10 次,已知最后一次 遇到的是花,他正好把酒喝光了。 请你计算李白遇到店和花的次序,可以把遇店记为 a,遇花 记为 b 。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有 多少呢?请你计算出所有可能方案的个数(包含题目给出的)。 注意:通过浏览器提交答案。答案是个整数。不要书写任何多 余的内容。 #include <cstdio> using namespace std; int sum = 0; char str[100]; int Fun(int now, int i, 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 级 台阶,有多少种不同的上法呢? 请你利用计算机的优势,帮助小明寻找答案。 解答: /有左右脚的限制,即第一步必须左脚,然后左右交替,最后一步 必须是右脚。即必须走偶数步。 #include<iostream.h> //有左右脚的限制。 const int N=39; int f(int m,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 表示走一步的次数。 int i,sum=0; for(i=x;x>=0;x-=2) //为了保持偶数步,必须 x 每次递减 2, 而不是 1 ;(x 要 x>=0,不能 x>0) ,x=0 是针对偶数台阶。 { y=N-2*x; sum+=f(x,y); //求组合数; } cout<<"共有 "<<sum<<"种走法。"<<endl; return 0; } /种走法。 2012

文档评论(0)

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

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

1亿VIP精品文档

相关文档