120123801037信息12康海东.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
母牛生小牛 #includeiostream using?namespace?std; int?main() { ????int?n,can,num,i,j,a[100]; ????cout请输入是第几年endl; ????cinn; ????a[0]=1;a[1]=1;a[2]=1; ????for(i=3;in;i++) ????????a[i]=a[i-1]+a[i-3]; ????couta[n-1]endl; ????getchar(); ????getchar(); } 过河问题分析 #include stdio.h #include stdlib.h #include string.h #define MAX_STEP 20 //index: 0 - 狼,1-羊,2-菜,3-农夫,value:0-本岸,1-对岸 int a[MAX_STEP][4];//用来表示每一步骤时狼,羊,菜,农夫的位置 int b[MAX_STEP]; //用来表示每一步骤农夫要带的东西,或空手过河,也就是方案 char *name[] = //农夫可能的四种过河方案 { 空手, 带狼, 带羊, 带菜 }; void search(int iStep) { int i; if (a[iStep][0] + a[iStep][1] + a[iStep][2] + a[iStep][3] == 4) //如果全部过岸了,打印结果,退出 { for (i = 0; i iStep; i++) //逐步打印过岸步骤 { if (a[i][3] == 0) //如果现在农夫在本岸,则要过对岸,b[i] + 1表示这一步骤农夫要带的东西,名字在name中 { printf(%s到对岸\n, name[b[i] + 1]); } else //如果现在农夫在对岸,则要回本岸,b[i] + 1表示这一步骤农夫要带的东西,名字在name中 { printf(%s回本岸\n, name[b[i] + 1]); } } printf(\n); //打印完方案,回车 return; //结束 } //现有的方案,相邻步骤有没有无变化的,如果没有,说明有错误,退出,找下一方案 for (i = 0; i iStep; i++) { /* 原型:extern int memcmp(void *buf1, void *buf2, unsigned int count); 用法:#include string.h 功能:比较内存区域buf1和buf2的前count个字节。 说明: 当buf1buf2时,返回值0 当buf1=buf2时,返回值=0 当buf1buf2时,返回值0 */ if (memcmp(a[i], a[iStep], sizeof(a[i])) == 0) { return; //现有的方案,相邻步骤无变化,退出,找下一方案 } } //如果现有的方案,相邻步骤均有变化的,判断方案最后一步的结果是否有问题 //羊是关键,如果羊不和农夫在一起,羊就不能和菜在一起,羊也不能和狼在一起, //所以,某一步iStep只要羊不和农夫在一起,有下列情况之一,就退出: //1.羊就和菜在一起 2.羊和狼在一起 //这也是递归调用的出口之一 if (a[iStep][1] != a[iStep][3] (a[iStep][2] == a[iStep][1] || a[iStep][0] == a[iStep][1])) { return; //不符合条件退出 } for (i = -1; i = 2; i++) //当前步骤试探每一种方案,i说明方案 //-1:空手;0:带狼;1:带羊;2:带菜 { b[iStep] = i; //选择农夫要带的东西 /* 原型:extern void *memcpy(void *dest, void *src, unsigned int count); 用法:#include string.h 功能:由src所指内存区域复制count个字节到dest所指内存区域。 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。 */ //本步在上一步基础上修改,所以,先把上一步的内容拷贝到当前步中 memcpy(a[iStep + 1], a[iStep], sizeof(a[iStep + 1])); //每一步都会有农夫在过河,这一步改变标志说明农夫过河:0-本岸,1-对岸 a[iStep + 1][3] = 1 - a[iStep + 1][3]; //递归在这里发生,在当前方案的基础上

文档评论(0)

xina171127 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档