最佳分油方案课程设计.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文档。上传文档
查看更多
最佳分油方案课程设计

河南城建学院 《高级语言程序设计课程设计》 课 程 设 计 报 告 设 计 题 目:最佳分油方案 指 导 老 师:张俊峰 薛冰 王康平 学 生 班 级:0614082 学 生 学 号:16 学 生 姓 名:丁攀红 同 组 人 员:李豪 张福宽 目录: 一:问题6:最佳分油方案: 3 二:系统环境: 3 三:设计内容概述、解决方案及说明: 3 四:流程图及模块图及说明: 3 五:程序清单(加注释)及相关说明: 5 六:设计中遇到的问题及解决方法: 8 七:心得体会: 9 八:参考文献: 9 C++课程设计报告 一:问题6:最佳分油方案: 设有大小不等、无刻度的三个油桶,它们的容量分别为x、y、z公升。初始时第一个油桶装满油x公升,其它两个油桶为空。寻找一种最少步骤的分油方案,能在其中一个油桶中分出m公升油。 条件: ⑴ xyz且x=m=z。 ⑵ 分油过程中,由于油桶无刻度,只能将油桶倒满或倒空。 ⑶ 若问题有解,输出最少步骤的分油方案:若倒油次数30步,仍无分油方案,输出“Unable” 二:系统环境: 硬件系统:计算机机器 软件系统:windows XP操作系统, Microsoft Visual C++ 6.0。 三:设计内容概述、解决方案及说明: 设计内容:关于分油这个问题相当复杂,三个容量分别为x,y,z无刻度的桶且xyz,要分出目标油量为m。特别是源油桶先倒入哪个桶比较合理,接下来该如何等等。首先要找到合理的分油步骤和方法,但这中间不排除会有一些冗杂的步骤,怎样用最少的步骤是这个问题的关键。首先验证full[0]full[1]full[2]和full[0]mfull[2]。 解决方案及说明:用结构体中的队列和链表可以简化问题。先用结构体声明源桶和目标桶,以及所要求的最大分油步骤。然后,再通过do while 循环进行信息验证,若仍无目标油量,设置无解标志,再用if语句进行判断,直至找到解。而且还要再通过do while语句进行正向连接倒油步骤,若出现目标油量,则输出最小步骤,:若无目标油量,则输出unble但为了简化信息处理量,规定队列的最大值为30,即q[30]。在30步内完不成或是找不到分油方案的输出Unable。 四:流程图及模块图及说明: 流程图说明: 1 struct函数声明几个结构体成员和队列的最大值。 2 main函数实现主要功能,完成分油方案,找出最少分油步骤数以及具体分油序列。 3 主函数中的while循环以及if语句用来判断分油的合理性,并且要求最大步骤不超过要求。 五:程序清单(加注释)及相关说明: /*最佳分油方案*/ #includeiostream #includeiomanip using namespace std; struct ele{ int state[3]; /*各桶盛油量*/ int sbucket; /*源桶*/ int obucket; /*目标桶*/ int last; /*轨迹元素在队列中的下标*/ }q[30]; /*队列*/ int full[3]; int i,j,k,found,unable,wi,wj,v,targ; int head,tail; void main() { cout请输入三个油桶的容积:; for(i=0;i3;i++) cinfull[i]full[0]full[1]full[2]; /*如要检查full[0]full[1]full[2],相应代码在此*/ cout目标油量:; cintargfull[0]=targ=full[2];/*检查targ=full[0]的代码在此*/ /*设置将初始状态存入倒油状态队列等初值*/ q[0].state[0]=full[0]; for(i=1;i3;i++) q[0].state[i]=0; q[0].sbucket=0; q[0].obucket=0; q[0].last=0; found=unable=0; head=tail=0; do { /*对状态队列中第一个还未检查过的元素在还未检查完每个倒出的桶 且还未找到解且还未确定无解情况下循环*/ for(i=0;i3 !found !unable;i++) if(q[head].state[i]0) /*倒出桶有油*/ /*在还未检查完每个油桶且还未找到解且还未确定无解情况下循环*/ for(j=0;j3 !found !unable;j++) if(j!=iq[head].state[j]full[j])

文档评论(0)

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

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

1亿VIP精品文档

相关文档