C++课程的设计——乘积最大.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文档。上传文档
查看更多
C课程的设计——乘积最大

课程设计报告 实验内容: 课程设计 相关课程: 信息系统开发语言(二) 学 期: 2011-2012学年第2学期 学时学分: 64 学时 4 学分 专业班级: 学  号: 姓  名: 指导老师: 提交日期: 2012年 6月23日 信息系统开发语言课程设计 一、课程设计目的 C++是实践性很强的课程。课程设计是加强我们实践能力的一个强有力手段要求我们在完成程序设计的同时能够写出比较规范的设计报告。对于我们基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。提高和加强自己的计算机应用与软件开发能力培养自己独立分析问题、解决问题、查阅资料以及自学能力,以适应计算机产业日新月异发展的形势。学习和掌握 C++程序设计方法以及上机调试技巧,为今后学习其它专业课程打好坚实的基础检测自己在这一学期对 C++的学习及掌握情况。知道自己的不足,及时的弥补。为以后的学习打下一定的基础也为自己以后如何制定学习计划做一铺垫。输入样例 输出样例: 62 问题分析 此程序要求实现将长度为N的数字串,用K个乘号分成K+1个部分,使得这K+1个部分的乘积能够为最大。 由题,数字串的顺序固定不变,乘号在不同的位置插入,使得数字乘积发生变化,并取其最大值输出。设num=3456,n=4,k=3,这表示要将4 位的十进制整数3456 分为3 段。划分方法为:3×4×56=672,3×45×6=810,34×5×6=1020,而第3 种划分才是最佳划分。本问题属于求最优值的一类问题。 假设第k个乘号插入的位置为p,取出由个数字组成的数字串,可能包含任意个(不多于k个)乘号。若能求出任意子串包含个乘号的最大乘积,则只需穷举第个乘号的插入位置该乘号将数字串分成前后两段,半段包含-1个乘号,其最大值根据假设已经算出,将它与半段的值相乘得到第个乘号在位置时的乘积。取所有的第个乘号不同插入方案中的最大乘积即为问题个数字组成的数字串插入个乘号的解。假aa…a(2=n=40),设f[i,j]表示在后i位数中插入j个乘号所得的最大值,p(1 , n , k )为从 l 到n加入 k 个乘号的最大乘积值。K=1时,一个乘号可以插在a1a2…a中的n-1个位置,这样就得到n-1个子串的乘积:a*a…a , aa* a…a , …, aa…a* a 此时的最大值p(1 , n , k )= max{ a*a…a , aa* a…a , …,aa…a* a} (2)K=2时,二个乘号可以插在aa…a中n-1个位置的任两个地方,这样总共会产生 个乘积。把这些乘积分个类,便于观察规律。 Case1: a*a* a…a , a*aa*…a , …, a*a…a* a 因后一个乘号位置不变,要使这些乘积最大,就要找出在前n-1个数中插入一个乘号的最大值。设符号f[n-1,1]为在后n-1个数中插入一个乘号的最大值,则 Case1的最大值为a*f[n-1,1] Case2:aa* a*a…a , aa*aa*…a , …, aa*aa…a* a 因后一个乘号位置不变,要使这些乘积最大,就要找出在前n-2个数中插入一个乘号的最大值。设符号f[n-2,1]为在后n-2个数中插入一个乘号的最大值,则 Case2的最大值为aa*f[n-2,1] 同理,Case3的最大值为aaa*f[n-3,1] …… Case(n-2)的最大值为aa…a*f[2,1] 此时的最大值p(1 , n , k )= max{ Case1,Case2,…, Case(n-2) } (3)由此得出K=i时,p(1 , n , k )= max{ a*f[n-1,i-1], aa*f[n-2,i-1], aa*f[n-3,i-1], …,aa…a*f[n-i,i-1] } 由上述可知,第个乘号的插入位置p(1 , n , k )为从 l 到n加入 k 个乘号的最大乘积值。 又令d (1 ,q)= aa…a 则p( l,n,k )=max{ d (1 ,q)* p( n-q , n , k-1 ) } 四、算法分析、设计与描述 1.算法分析和设计 (1)算法分析 由于问题的规模为40,1K≤6,只有乘号插入的位置是变化的要在长为N的数字串中插入K个乘号使得乘积最大

文档评论(0)

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

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

1亿VIP精品文档

相关文档