- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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])
您可能关注的文档
最近下载
- CJJ2-2008城市桥梁工程施工与质量验收规范.doc VIP
- GB∕T24067-2024温室气体产品碳足迹量化要求和指南.pptx.pdf
- 口服药物的吸收.ppt VIP
- 公司内帐管理系统Excel模板.xlsx VIP
- reading skill --Distinguishing Between Facts and Opinions.ppt
- 分式乘除法专项练习60题(有答案).doc VIP
- 《工业固体废物资源综合利用评价规范》(THNEE 009-2025).pdf VIP
- 正泰NA1-2000智能型万能断路器.pdf VIP
- 第3课 中古时期的西欧【课件】(共34张PPT)-中职高一年级下册学期高教版(2023)世界历史全一册(含音频+视频).pptx VIP
- 加拿大油砂沥青加工方案研究.doc VIP
文档评论(0)