| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 746 人关注过本帖, 1 人收藏
标题:求助:用C++编程,且要求程序里要有类
只看楼主 加入收藏
duoaizhu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-22
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:8 
求助:用C++编程,且要求程序里要有类
设有一个长度为N的数字串,要求使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
搜索更多相关主题的帖子: 要求 
2012-06-23 00:19
liudw2
Rank: 4
等 级:业余侠客
帖 子:85
专家分:248
注 册:2011-7-31
收藏
得分:5 
不要老想别人会帮你将代码写出来,别人也是要学习或者工作的,下面将思路给出来,自己好好想想。
要想乘机最大,乘号后面的数字就要最大。
添加n个*的步骤以6571792为例:
先添第一个,找到最大的数字--9,在前边添上*,变成65717*92了

然后添第二个,找到第二大的数字--7有两个,怎么办?就要这样看了:
(从做到右)第五个7,后面就是*了,所以这个7可以看作是7.0,(从做到右)而第三个7后面有17,然后才是*,所以这个7相当于7.17,因为7.17> 7所以要在第三个7前加

以后就类推了。
2012-06-23 09:50
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 2楼 liudw2
没看懂第二个,比如是 9999,只加一个乘号。
是不是按的说法应该在第一个9后面分,因为后面的相当于 9.99。
但其实 9 * 999 = 8991 < 99 * 99 = 9801。
2012-06-23 21:33
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
不会耶,我在 c 那边发帖问了。应该有人会答的,楼主可以去关注一下:
https://bbs.bccn.net/thread-372126-1-1.html
2012-06-23 22:08
zhuanjia0
Rank: 4
等 级:业余侠客
威 望:3
帖 子:86
专家分:232
注 册:2012-1-13
收藏
得分:5 
我想到一个解决办法,你可以参考下。
先将数字串放到整型数组里,然后对数组进行排序,再取最大数,最后再乘以剩下的有序数列,例如9*954321
2012-06-23 23:05
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 5楼 zhuanjia0
肯定不能排序呀。数的顺序必须还是原来的顺序。
2012-06-23 23:23
duoaizhu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-22
收藏
得分:0 
要用动态规划做。
问题中只有乘号插入的位置是变化的,取数字串中的任意一段(i到j)来考虑,若能求出在其中插入K-1个乘号的最大乘积,则只需穷举第K个乘号的插入位置t(t从初始的i+K-1开始插入,最多插入到j-1后)。该乘号把数字串分成了两段,前半段包含K-1个乘号(其最大值已经算出),将它的值与后半段的值相乘得到第K个乘号在位置t时的最大乘积。选出t在各个位置时得到的最大乘积即为问题的解。  
    依此类推,把K-1的问题归结为K-2的情况,……,直到求在任意一段中插入1个乘号的最大乘积时,需预先算出在任意一段中插入0个乘号时的最大乘积。而此时的值是已知的(即为该段的数值)。假设DP[i,j,K]表示在长为N的数字串中,从第i个数字到第j个数字之间插入K个乘号的最大乘积,动态转移方程如下:
DP[i,j,k] = MAX {DP[i,t,0] * DP[t,j,k-1] | i<t<j}  
2012-06-24 01:16
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:5 
c 那边最先讨论出的方法也是动态规划,那边给的描述比楼主的还稍微简洁一点,不过思想是一样的。这肯定是一个可行的算法。

基于 2楼 的提法(虽然是错的)。确实也有人在考虑类似的贪心算法。不过这种思想,还有很多基础问题没有解决。而且也可能本身就不对。楼主如果着急实现,就用动太规划做就行了。
2012-06-24 10:51
jiantiewen
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:61
专家分:307
注 册:2012-6-22
收藏
得分:5 
程序就是用来为人们做那些重复繁琐数量又很多的计算。这样才是最简单直接又正确的方法。
2012-06-30 02:34
快速回复:求助:用C++编程,且要求程序里要有类
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019274 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved