蓝桥杯-作业2-版本1.docx

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

1、串。密码脱落X星球的考古学家发现了一批古代留下来的密码。这些密码是由A、B、C、D 四种植物的种子串成的序列。仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。 ABA ABBA A由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。你的任务是:给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。输入一行,表示现在看到的密码串(长度不大于1000)要求输出一个正整数,表示至少脱落了多少个种子。例如,输入:ABCBA则程序应该输出:0再例如,输入:ABDCDCBABC则程序应该输出:3----------------------思路A............C****AC****代码实现:#include iostreamusing namespace std;#includecmath#includestringintsinx=1000;void f(string a,intx,inty,intnum)//num缺少的个数,{ if(x=y){ if(sinxnum) sinx=num;//结束比较大小 return; } if(a[x]!=a[y])//不对称 { f(a,x+1,y,num+1);//后面缺少 f(a,x,y-1,num+1);//前面缺少 } else f(a,x+1,y-1,num);//对称继续比较}int main(){ string a;cina;int along=a.size(); f(a,0,along-1,0);coutsinx; return 0;}运行结果:2、递归1、39级台阶,1. 每步1或2阶2. 必须是偶数步求上台阶的方案数。------------------没有偶数限制:f(n) = f(n-1) + f(n-2) --------------------经典的间接递归的例子:f(n) 必须偶数步g(n) 必须奇数步f(n) = g(n-1) + g(n-2)g(n) = f(n-1) + f(n-2)出口:f(n) n==0: 1 n==1: 0 n==2: 1g(n) n==0: 0 n==1: 1 n==2: 1代码实现:#include iostreamusing namespace std;#includecmath#includestringint f(int n);int g(int n){ if(n==0) return 0; else if(n==1) return 1; else if(n==2) return 1; else return f(n-1)+f(n-2);}int f(int n){ if(n==0) return 1; else if(n==1) return 0; else if(n==2) return 1; else return g(n-1)+g(n-2);}int main(){coutf(39); return 0;}运行结果:3、搭积木小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9。搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。最后搭成4层的金字塔形,必须用完所有的积木。下面是两种合格的搭法: 0 1 2 3 4 56 7 8 9 0 3 1 7 5 29 8 6 4 请你计算这样的搭法一共有多少种?请填表示总数目的数字。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。代码实现:#include iostreamusing namespace std;#includecmath#includestringint sum;bool p(int a[10]){ if(a[0]a[1]||a[0]a[2]||a[1]a[3]||a[1]a[4]||a[2]a[4]||a[2]a[5]) return false; if(a[3]a[6]||a[3]a[7]||a[4]a[7]||a[4]a[8]||a[5]a[8]||a[5]a[9]) return false; return true;}void f(int a[10],intk,int n){ if(n==k) { if(p(a)) sum++; } else { for(inti=k;in;i++) { swap(a[i],a[k]); f(a

文档评论(0)

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

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

1亿VIP精品文档

相关文档