数学建模论文29626_第1页
数学建模论文29626_第2页
数学建模论文29626_第3页
数学建模论文29626_第4页
数学建模论文29626_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE25多台设备同时故障的最优维修次序一、摘要本文是关于多台设备同时故障时维修次序的优化设计问题,即在给定每台设备所需维修时间和停工造成损失的条件下,确定维修次序,使企业经济损失降到最低。我们以经典的排列论为基础,利用数值模拟技术,将影响设备维修次序的两个离散型的数学变量(维修时间和每小时造成的损失)用计算机实值模拟,建立了相应的排队论数学模型,用穷举技术得到设备的所有维修次序,进而从中选取最优值,实值模拟方案如下:方案一:一个工人维修七台故障设备时,根据排队论知识,可以将它抽象为七个不同的对象排队列,最终由计算机模拟数据可得最佳维修次序为:2563147,而最小损失为:199.90(万元);方案二:在结论一的基础之上,我们将维修工人扩展到甲乙两人,我们继续对排队论技术进行进一步改进,最终得到了甲乙两人维修时最小损失:117.30(万元);最佳维修次序甲:5614乙:237方案一,二维修次序的编号与损失之间的关系在下图中对比展示;方案三:在方案一的基础上,将故障设备数量扩展到n,而由组合数学可知故障设备数目与维修方案种数之间满足函数f(n)=n!;当n取值较小时,用数值模拟技术可以得到极为精确而可靠的最优解,而当n值很大时,得到最优解会很困难,此种情况称之为“组合爆炸”,为此我们采取函数嵌套递归来实现组合爆炸问题的求解。二、问题的重述对于生产企业而言,其生产设备都会在寿命期内出现各种原因的故障,需要进行维修方能继续进行正常生产,对设备进行维修不仅需要企业负担一定数额的维修成本,而且因设备维修耽搁生产会给企业造成巨大的经济损失,因此为了使企业的经济损失降到最低,一旦出现设备故障就应及时对设备进行维修,使其尽快投入生产,但如果发生多台设备同时出现故障由于工人数量有限,就只能按照一定的次序进行维修,维修好的设备马上投入生产,维修工人再接着维修其它受损设备。在这种情形下,由于不同的的设备停工给企业造成的经济损失不同,维修所需要的时间也不同,此时设备的维修次序就显得至关重要。因此寻求一种最优的维修次序,把企业的经济损失降到最低就显得相当重要。现考虑一个具体问题:某一生产企业同时有七台设备出现故障,每台设备维修所需要的时间和停工给企业造成的损失如下表所列:机器编号1234567维修所需时间(小时)58784813停工造成损失(万元/小时)0.61.81.20.80.81.71.0针对这一具体的设备维修问题解决一下问题:(1).如果维修工人只有一名,试建立数学模型求解使总损失达到最小的设备维修次序;(2).如果维修工人有两名,每台机器的维修只能由一个人单独完成,试重新回答问题(1);(2).对该问题进行简单推广,如果同时有n台设备需要维修,而每台设备的维修时间和停工造成的损失都是已知的,并且在只有一名维修工人的情形下,建立使总损失达到最小的数学模型,并给出求解该问题的算法;三、问题的分析3.1我们首先依次对七台受损设备进行编号:1,2,3,4,5,6,7,在第一问中将工人甲用a表示,再将每台仪器所对应的维修时间和单位时间(每小时)内的损失记为a(n).time和a(n).sh,当工人数目增加到两人时再引入b1,b2,b3,b4,b5,b6,b7;则其相应的维修时间和单位时间内的损失就为b(n).time和b(n).sh;3.2再依次让a1,a2,a3,a4,a5,a6,a7不重复的取遍1,2,3,4,5,6,7七个数据,然后用计算机对这些数据进行维修过程的模拟,用c语言编程来模拟维修过程,得出所有可能的维修次序以及对应的损失,再通过比较得出最佳维修次序;3.3在第一问的基础上,引入变量b,对算法进行改进,让a和b分别在编号1,2,3,4,5,6,7,的设备中按照一定的规则取适合的设备进行维修,用c语言进行编程模拟两人维修的过程,同样得出所有种可能的维修次序,经过比较即可求得最优解;3.4对于第三问,当用计算机解决此类节点数目过于庞大的问题时,根据排列论原理可知其组合数种数超出计算机的求解能力,即出现组合爆炸问题,因此对于此类人工智能问题,我们采取函数多层嵌套递归的方法,运用较排列论更为先进的搜索技术——深度优先搜索,登山搜索,最小代价搜索来设计算法,以达到求解此类数据过于膨胀的问题,其算法设计我们会在下文中详细展开;四、模型假设4.1假设在维修过程中,每个人能够在规定时间内独立完成各自维修任务,并且不会发生其他影响维修进度的意外事件;4.2假设工人在休息时,企业也停止生产,即在下班时间故障设备不会对企业的生产造成损失;4.3假设故障设备在维修好后马上投入生产,其间不存在时间差;4.4假设故障设备在维修其间,其维修时间不会发生变动;4.5假设故障设备在维修完成后,直到整个维修过程结束该设备不会再损坏;4.6假设第二种情况下,甲具有优先选择的权利,即当甲乙二人同时面对同一台故障设备时,该设备的维修工作交给甲来做;五、符号说明i:故障设备的编号,它可以取值1,2,3,4,5,6,7;ai:甲维修的故障设备的编号,从i中选取;ai.time:甲所维修的第i台设备所需要的时间,已知;ai.sh:甲所维修的第i台设备对企业造成的损失,已知;bi:乙所维修设备的编号,已知;bi.time:乙所维修的第i台设备所需要的时间,已知;:表示函数fun(i,n),其功能是在n个数据中随机不重复的选取i个;A:表示维修故障设备时可以参取的所有维修方案的种数;A7:表示当有七台设备出现故障时,所有可能的维修方案的种数;Zsh:单位时间内所有故障设备对企业的生产所造成的损时;Shn:采用第n种维修方案进行维修,当整个维修过程完成后所有故障设备给企业生产造成的损失;Bestsh:表示所有维修方案中的最小损失,也即维修损失的最优解;Fc(n):函数,其功能是实现求n个元素中的最小值;Cxn:采用第n种维修方案进行维修,当整个维修过程完成后,所采用的该种维修次序;Bestcx:所有维修方案之中的最佳维修次序,即维修次序的最优解;Fcx:输出函数,功能是实现将每一种维修方案所对应的维修次序输出;Si:一段临时存储空间,当甲乙二人合作维修故障设备时,为其提供选择的基础;Bj:用来识别该设备是否已维修完成的一个标志性属性;Fnone:表示所有标记bj为零的故障设备的损失之和;Shti:表示t时刻故障设备对生产造成的损失;六、模型的建立及求解6.1根据排队论建立单个工人情况下维修七台故障设备的模型6.1.1由题目第一问可知,先对七台故障设备编号为1,2,3,4,5,6,7,用i来表示,相应的对工人甲,其每次可以选择其中任何一台设备进行维修,即ai=i(i=1,2,3,4,5,6,7)该过程描述为:a1=i(i=1,2,3,4,5,6,7,));即第一次时,甲可以从七台故障设备中随机选择一种进行维修;a2=i(i=);即在上一次选择的基础上,甲从剩余的六台设备随机选择一台进行维修;a3=i(i=(……));在上一次选择的基础上,甲从剩余的五台设备中随机选择一台进行维修;a4=i(i=(……));在上一次选择的基础上,甲从剩余的四台设备中随机选择一台进行维修;a5=i(i=(……));在上一次选择的基础上,甲从剩余的三台设备中随机选择一台进行维修;a6=i(i=(……));在上一次选择的基础上,甲从剩余的两台设备中随机选择一台进行维修;a7=i(i=(……));最后甲将取最后一台故障设备进行维修,维修完成则整个维修过程全部结束;根据组合论原理可知维修方案种数A与故障设备数目n之间存在如下关系:A==n所以当n取值为7时:===7!=5040即,对于七台故障设备,它共有5040种不同的维修方案,设备数目与维修方案之间的关系用下图描述:6.1.2根据题意可知:如当:ai()=1,2,3,4,5,6,7时,每一个ai都对应各自的维修时间ai.time和该设备在单位时间内对企业成产造成的损失ai.sh;因为七台设备在整个维修过程中所需要的总时间是固定不变的,则在这一种维修方案之下所有故障设备在单位时间内对企业造成的损失也是确定不变的,我们把这个值设为zsh;则由题意知:Zsh=则当选择第n种方案进行维修时,当整个维修过程完成后所有故障设备对企业的生产造成的损失Shn为:Shn=同时当选择第n种方案进行维修时,它所对应的维修次序Cxn为Cxn=(a1,a2,a3,a4,a5,a6,a7)6.1.3上面已经得到每一种方案所对应的损失Shn值,现在所有A7种维修方案之中寻求对企业生产造成的损失最小的损失值Bestsh;Bestsh=Fc((1=1,2,3,4……n))现在最小损时Bestsh值已经找到,然后根据维修损失的最优解Bestsh,即可得到其所对应的最佳维修次序,最佳维修次序Bestce如下表示:Bestcx=Fcx(Bestsh)到此,一个工人面对七台故障设备时的最佳维修方案成功得到。6.1.4图像将在下面甲乙两人同时维修此七台设备的情况下对比展示!6.2根据排列论和循环检索技术建立甲乙两人同时维修七台故障设备的模型5.2.1当甲乙二人合作维修七台故障设备时,分析所有种可能的维修方案我们仍然运用5.1.1中所设变量a1,a2,a3,a4,a5.a6,a7;在引入另一个变量bi分别为b1,b2,b3,b4,b5,b6,b7.当甲乙两人同时面对七台故障设备时,a1,a2,a3,a4,a5,a6,a7和b1,b2,b3,b4,b5,b6,b7,可分别从编号i=1234567的七台故障设备中取适当的设备进行维修,显然ai与bi共同取够i=1234567中的所有值,且ai不等于bi;则根据第一问中我们已经求得的当七种设备故障时其不同的维修次序有A7=7!=5040种方法,那么我们是否也可以再次以这5040种不同的维修次序作为基础,让ai与bi分别在每种不同的维修次序中再去取值,即假设现有一种维修次序为:i1=1,i2=2,i3=3,i4=4,i5=5,i6=6,i7=7;则我们可以采用“头尾逼近法则”让a1=i1,b1=i7;然后通过比较故障设备a1即i1所对应的维修时间a1.time和故障设备b1即i7所对应的维修时间b1.time来确定那台设备先维修完成,这样我们就可以让ai和bi实现都从i中选择不同的数据,所以采用这种以A7种不同的维修次序为基础的方法是科学的,也是合理的;所以我们可以仍然将第一问中的部分结果用到这里来;6.2.2首先我们开辟一块临时的存储空间Si,来存储七台故障设备的任意一种排列方式,也即用这样一段临时存储空间来建立一个队列基础来供甲乙二人选择。然后再取两段永久的存储空间ai和bi来分别存储甲和乙各自维修的设备设备以下几组属性:ai.time表示甲所维修的该台故障设备所花费的时间;ai.sh表示甲所维修的该台设备对企业生产造成的损失;bi.time表示乙所维修的该台故障设备所花费的时间;bi.sh表示乙所维修的该台设备对企业生产造成的损失;为了便于求解该种维修次序之下的总损失,我们为每台设备添加另一个属性bj,即ai.bj和bi.bj,用来识别该设备是否已维修完成,便于甲乙两人进行下一次的选择,在使用之初可将ai.bj和bi.bj都置零,等到此故障设备维修完成后再将其置为一。另外对于ai和bi,因为其取值数目具有很大的被动性,所以维修之初我们先将ai很bi都置为零,当它们有值可取时,再用ai的真值去替换另即可,当维修结束后只输出ai和bi不为零的值即为甲或乙所维修的故障设备的最佳维修次序;又根据假设条件当甲乙二人同时面对一台故障设备时,甲具有优先选择权,则维修之初将ai和bi均置零,然后令:甲:a1=s1,乙:b1=s7;令a=ai.time,b=bi.time然后比较a1.time和b1.time执行如下算法:当ai.time大于bi.time时,就说明乙所选故障设备所需维修时间较短,那么可以将此设备标记属性bi.bj置为一,则在这段时间内故障设备对生产造成的损失的计算方法如下:Sht1=bi.time*bi.sh+bi.time*Fnone该台设备维修结束后乙立刻得选取下一台设备,此时b2取值为s6;当a.time小于b.time时,就说明甲所选的故障设备所需要的维修时间较短,那么我们可以将此设备标记ai.bj置为一,则在这段时间之内故障设备对生产造成的损失为:Sht2=ai.time*ai.sh+ai.time*Fnone该台设备维修结束后甲立刻得选取下一台设备,此时a2取值为s2;而当ai.time等于bi.time时,就表示甲乙此时所选故障设备维修完成所需时间相同,那么此时可将ai.bj和bi.bj均值为一,而在这段时间内故障设备对生产造成的损失为:Sht3=ai.time*(ai.sh+bi.sh)+ai.time*Fnone甲乙所选故障设备维修结束后立刻得选取下一台设备,此时a3取值为s3,b3取值为s5;然后让ai和bi循环将所有故障设备的序号都取完,此时的Zsh就为:Zsh=而相应的甲和乙所维修的故障设备各自的维修次序也就得到确定;到此我们就解决了一种排序之下的总损失,也得到了甲乙二人各自的维修次序,而对于算法设计中的一些琐碎问题,在此不再赘述。6.2.3上面已经得到所有A7种不同排列方式的维修次序所对应的损失Zshn值,现,在所有A7种维修方案之中寻求对企业生产造成的损失最小的损失值Bestsh;Bestsh=Fc((i=1,2,3,4……n))现在最小损时Bestsh值已经找到,然后根据维修损失的最优解Bestsh,即可得到其所对应的最佳维修次序,最佳维修次序Bestce如下表示:a.bestcx=Fcxa(Bestsh)b.bestcx=Fcxb(Bestsh)到此甲乙两人合作维修故障设备的情况下的最优解已找到。6.2.4在第一第二种情况下以求得7台故障设备所有可能的维修方案,由于一人维修和两人合作维修所采用的基础是一样的,即在同一种维修方案之下计算机对他们的处理方式是相同的,因此我们可以对每种维修方案进行编号,而每种方案则各对应两个故障设备对生产造成的损失值,其一是一个人单独完成时的,而另一个值则是甲乙两人合作完成时的,我们用Matlab将这种对应关系对比展示在同一张图上,来描述两种情况的关系;对应关系展示如下:6.3在第一问的基础上,将故障设备数量扩展到n,求解一个工人维修n台故障设备的最优解6.3.1对问题进行分析,建立多分枝多层次的树型结构模型众所周知,根据组合数学定理,N个对象的排列总数等于N!(N的阶乘)。33个对象的排列种数是33!(66),44对象是44!(1424),55对象是55!(120120),66对象是66!(720720),77对象是77!(50405040)。以此类推,1000对象的排列种数是天文数字。)。以此类推,100对象的排列种数已是天文数字。下图图中的趋势形象的表示了人工智能研究者称为组合爆炸的现象。对象总数逼近数百时,很快就不可能再研究(甚至枚举)各种组合了,同时,原先总是正确的穷尽搜索法也因占用的计算时间和资源太多而变得不再实用。(对象N和排列数N!之间的关系如图所示:)为此我们对组合数做以下转化:实用由组合数学定理 =*,=**,……从而当n为偶数时 =***……**当n为奇数时 =***……**这就是说我么可以将加以转化将其建成一棵多分枝多层次的树型结构模型,最终成为我们在模型一中七台故障设备的排列问题,运用我们已经很成熟的解决方案解决即可,然后应用深度优先搜索或者其他搜索技术进行搜索即可解决人工智能组合爆炸问题;6.3.2搜索算法的比较和选择◆深度优先搜索 ◆登山搜索 ◆宽度优先搜索 ◆最小代价搜索。下面逐一进行分析说明:深度优先搜索:尽量沿一条路径向深处探测,在失败之前不管其他路径上的结点。宽度优先搜索:宽度优先搜索先检查一层的所有结点后再查下层结点。登山搜索:登山算法属于启发式搜索范畴,它把显得离目的地最近(离当前地最远)的结点选作下步点。这种算法得名于把搜索局势比喻成登山者黑夜中在半山腰迷路。假设登山营地在山顶时,即使在黑夜中,登山者也知道向上判断呢个是正确的方向。最小代价搜索:也属于启发式搜索范畴,这种策略类似于足登冰鞋站在大斜坡中间的情况,滑旱冰者明显感到向下滑行比向上滑行轻松很多。综上所述,平均情况下,启发式搜索趋于比盲目搜索有更好的性能。然而,因为缺乏确认下一结点可能在路径上的信息,有时无法实用启发式搜索,也就只能运用非启发式搜索方法了。相比之下,登山法产生的解路径上结点一般更少,最小代价法产生的解路径一般开销更小。然而,需要接近最优解又不能承担穷尽搜索的开销时,一个有效的办法就是逐次使用上述四种方法,取逐解中的最优解。因为几种搜索的原理都有实质的差别,在各种方法产生的解解中选优是合理的。由组合数学定理 =*,=**,……从而当n为偶数时 =***……**当n为奇数时 =***……***6.3.2树形结构模型算法设计1首先定义一个长度为n的全局结构体数组变量s[n](n为常量),用来存放n个对象的所有详细信息,再次给其同样添加一个标记性的属性s[i].bj,将其全部置零,作为初始化;2.根据=**……*的转化关系,我们可以将,,,……,放在在不同的函数体内,采用递归算法,将算法中心放在最深的那个函数,即实现功能的函数内部,再设一个全局性结构体变量,用来在是存储一种a1,a2,a3,a4a5······an的取值,在最深层函数内部计算总损失,并将维修次序和总损失存储下来,可以将它写入文件,这样就不会发生数组长度超过计算机底线的事情,并数据进行编号以便求出最优解;3现在描述最外层函数的算法设计:建立数组an[n]和a(n-1)[n-1](n为题目中已给出的对象总数),实现时用两层循环嵌套,当a1和a2分别取到s[n]中的两个数据时,将这两个数据所对应的标记改为一,并将这两个对象的序号个拷贝一份到an[0]和a(n-1)[0]种,作为一种记忆形式;做完这一步之后调用下一个函数来实现,这个函数内部所有结构应同完全相同,当函数由最深一层返回后还需再做一步,即重新将s[i]对应的所有标记都再次初始化,下一次开始给a1,a2取值时首先比较an[i]和a(n-1)[i]中数据,确保不会发生重复;4函数全部运行结束,在此不再用c语言来实现算法;6.3.3下面将此算法的简易流程描述如下七、设计规范合理性的讨论7.1合理的方面:(1)该设计规范在分析对象有限时(<100时)利用穷尽搜索方法,由于采用比较成熟和可靠的排列论为基础,其穷举作为主要思想,因此在解决问题时得心应手,安全可靠;而当分析对象很大时,由于会发生“组合爆炸”问题,所以使用函数嵌套递归循环把问题分块分层次解决,每块求解出分块自身中的最优解,然后对这些最优解进行排序从而找出最小损失时的维修次序。在分块求解时又可根据条件采用登山搜索、最小代价搜索等方法,精简了程序,减少了计算机的工作量,因此是完全合理的。该模型综合运用多种方法对问题进行求解,其中穷举法简单易懂,数据量较小时用计算机编程求解,仅仅几秒钟就可以完成;而概率、图论、组合数学等方面理论性较强,易于为大家所接受。而当运用到实际问题的解决时,其结果出错可能性小,结果精确可靠,可以推广;八、结果和误差分析本文根据排列数学理论建立的模型,得到了单人维修7台设备时维修的次序:2563147和对应的最小损失199.9000万元,得到了双人维修7台设备时,甲工人的维修次序5614和乙工人的维修次序237以及最小损失117.3000万元。显然此结果可把工厂的损失降到最小。九、模型推广此模型建立于一个工人维修七台设备是的情况,只要在计算机计算能力范围内,就可以将其扩展到多台设备的情况。同样,有方案二,我们实现了两个工人维修七台设备的最优解的求解,那么我我们就可以将它扩展到多个工人多台设备的情况下,因此此模型具有很强的适用性,和可利用性,扩展空间大。(3)题目考虑的只是已知每台设备维修所需的时间,及每台设备在损坏时每小时对企业造成的经济损失时求最优解的情况,但由于模型是以排列论及穷举法为基础建立的,因此可以将它扩展到其他两个甚至多个离散型变量的实际问题中去,由此可见此模型具有很广泛的用途。十、模型的优缺点该模型是运用组合数学定理和登山搜索等搜索方法以及穷举法经过严格的论证建立起来的。此模型的结果很精确,保证了多台设备同时故障时维修损失的最优化,能很好地符合题目的要求,也适合于其它主要应用排列论和穷举法求解的优化问题,比如如何给球队排名次等,因此有很强的适应性和实用性。但因为此模型主要建立在计算机计算之上,所以当数据对象很大时,会受到计算机本身的限制而无法得到我们所需要的答案,因此还是有它的局限性存在。十一、参考文献[1]谭浩强.C程序设计.清华大学出版社.1991,7(306~320).[2]雷功炎.数学模型讲义.北京大学出版社.1999,4(161~185)[3]李桂成.计算方法.电子工业出版社.2009,7(218~267).[4]美HerbertSchildt著.王子恢,戴健鹏译.最新C语言精华(第三版)电子工业出版社.1997,2(423~458).十二、附录部分附件1第一问程序代码:#defineN7;#include<stdio.h>#include<math.h>structs//机器类别{ intxh;//机器序号 double time;//维修时间 doublesh;//损失}s[7];structcx//不同的维修次序{ inta[8];}cx[10000];main(){ inti,j=1,k,bestcx; inta1,a2,a3,a4,a5,a6,a7; doublesum[10000],jc1=1,jc2,zsh=0.0;//sum表示不同次序造成的损失 doublemin; FILE*fp; if((fp=fopen("E://a.txt","w"))==NULL) { printf("文件打开失败!\n"); return0; } printf("pleaseenterthedate!\n"); for(i=1;i<=7;i++) { scanf("%lf%lf",&s[i].time,&s[i].sh); } for(k=1;k<=7;k++) { zsh+=s[k].sh; } for(i=1;i<=7;i++) jc1*=i;//求总共有多少种排列方式 a1=2;a2=5;a3=6;a4=3;a5=1;a6=4;a7=7; for(a1=1;a1<=7;a1++) for(a2=1;a2<=7;a2++) for(a3=1;a3<=7;a3++) for(a4=1;a4<=7;a4++) for(a5=1;a5<=7;a5++) for(a6=1;a6<=7;a6++) for(a7=1;a7<=7;a7++) { if(a1==a2||a1==a3||a1==a4||a1==a5||a1==a6||a1==a7)continue; if(a2==a3||a2==a4||a2==a5||a2==a6||a2==a7)continue; if(a3==a4||a3==a5||a3==a6||a3==a7)continue;if(a4==a5||a4==a6||a4==a7)continue;if(a5==a6||a5==a7)continue;if(a6==a7)continue;sum[j]=s[a1].time*zsh+s[a2].time*(zsh-s[a1].sh)+s[a3].time*(zsh-s[a1].sh-s[a2].sh)+s[a4].time*(zsh-s[a1].sh-s[a2].sh-s[a3].sh)+s[a5].time*(s[a5].sh+s[a6].sh+s[a7].sh)+s[a6].time*(s[a6].sh+s[a7].sh)+s[a7].time*s[a7].sh;cx[j].a[1]=a1;cx[j].a[2]=a2;cx[j].a[3]=a3;cx[j].a[4]=a4;cx[j].a[5]=a5;cx[j].a[6]=a6;cx[j].a[7]=a7;fprintf(fp,"%.2lf\n",sum[j]);for(i=1;i<=7;i++)fprintf(fp,"%d",cx[j].a[i]);fprintf(fp,"\n");j++; }jc2=j-1;// for(j=1;j<jc2;j+=100)//fprintf(fp,"%.2lf\n",sum[j]);min=sum[1];for(i=1;i<=jc2;i++){ if(min>sum[i]) min=sum[i]; }for(j=1;j<=jc2;j++)if(min==sum[j])break; bestcx=j;//寻找最佳维修次序的存储位置 printf("最小损失:%lf\n",min); printf("最佳维修次序:"); for(i=1;i<=7;i++) printf("%d",cx[bestcx].a[i]); printf("\n"); fclose(fp); return0; }//50.681.871.280.840.891.7131附件二第二问程序源代码:#defineN7#include<stdio.h>typedefstructdate//机器信息{ intbj; intxh; doubletime; doublesh; };typedefstructwxcx//维修次序{intcx1[N];//假的维修次序 intcx2[N];//乙的维修次序 doublesum;};fun(structdate*s,structwxcx*p,intn){inti=1,j=7,w=1,q=1,k; doubleb,sum=0,item=0,t,tz=0; doublea; for(intm=0;m<N;m++)//将空出来零,以便输出序号的序号位置 { p[n].cx1[m]=0; p[n].cx2[m]=0; } a=s[i].time; b=s[j].time; p[n].cx1[w]=s[i].xh; p[n].cx2[q]=s[j].xh; while(i<=j) { if(a>b) { if(i==j) { sum+=a*s[i].sh; p[n].cx2[q]=0; p[n].sum=sum; return0;} s[j].bj=1; sum+=b*s[j].sh; t=b; a=a-b; b=s[--j].time;p[n].cx2[++q]=s[j].xh; if(i==j) b=0; gotoloc; } elseif(a<b) { if(i==j) { sum+=b*s[j].sh; p[n].cx1[w]=0; p[n].sum=sum; return0;} s[i].bj=1; sum+=a*s[i].sh; t=a; b=b-a; a=s[++i].time; p[n].cx1[++w]=s[i].xh; if(i==j) a=0; gotoloc; } else { if(i==j) { sum+=a*s[i].sh;//假设当甲乙两人同时面对同一机器时,由甲来完成 p[n].cx2[q]=0; p[n].sum=sum; return0; } s[i].bj=1; s[j].bj=1; t=a; sum+=t*(s[i].sh+s[j].sh); a=s[++i].time; b=s[--j].time; p[n].cx1[++w]=s[i].xh; p[n].cx2[++q]=s[j].xh; gotoloc; }loc: item=0; for(k=1;k<=7;k++) { if(s[k].bj==0) item+=s[k].sh; } sum+=t*item; tz+=t; } p[n].sum=sum; return0;}main(){ inti,k,n=1,locate; doublemin; inta1,a2,a3,a4,a5,a6,a7; dates[8],s1[8]; wxcxp[10000]; FILE*fp; //voidfun(date*,wxcx*,int); if((fp=fopen("E://b.txt","w"))==NULL) { return0; } printf("pleaseenterthedate!\n"); for(i=1;i<=7;i++) { scanf("%lf%lf",&s1[i].time,&s1[i].sh); fprint

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论