| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6937 人关注过本帖
标题:求助:有一组数字,求任意几个数相加,使的其和等于或接近给定值.请问这个程序 ...
只看楼主 加入收藏
一路顺意
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-11-6
结帖率:100%
收藏
 问题点数:0 回复次数:3 
求助:有一组数字,求任意几个数相加,使的其和等于或接近给定值.请问这个程序如何实现?谢谢!
有一组数字,数字数量不定,求其中任意几个数相加,使的其和等于或接近给定值.请问这个程序如何实现?
搜索更多相关主题的帖子: 相加 数字 给定值 
2009-12-02 15:56
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
这个程序算法复杂,效率恐怕不高,特别是数据量大的时候。曾经做了一个这样的算法,意思是可以把准备参与计算的数据前面系数设定为1,不参与计算的数据系数为0,每次计算就是这些由0和1组成的系数的排列了。假如有N个数据,则这样的排列就是2^N-1个。得出的算法是:
(1)I从1到2^N循环
(2)将I转换为N位二进制M
(3)析出M中1所在位置,并将对应的数据累加,得到X
(4)X与给定的数据Y比较,Z=ABS(X-Y),若Z=0则程序结束,输出结果;若Z#0则保留这个值并与前面得到的Z比较是否最小,...
(5)转(1)

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2009-12-02 16:14
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
可以编程,虽然比较复杂。提供一些思路,供探讨。
题目:
有S1,S2,S3,.....SN,N个数据,求其中M个数据相加,其和等于或接近给定值H。
解题:
1.首先将数据按从小到大的顺序放进字段名为A0的表B0,然后用
  COPY TO ARRA AR 命令,将数据放进数组AR备用。
2.用以下程序段求M值范围。

USE B0
HH=0
SCAN
MM=RECNO() &&相加的个数
HH=HH+A0
IF HH>H &&如果和大于给定值H
EXIT
ENDIF
ENDSCAN
IF MM=1
WAIT '题目无解'
RETURN
ENDIF
IF MM=2
WAIT '题目的解是数据中最小的那个数'
RETURN
ENDIF
IF MM-N=1
WAIT '题目的解是取全部数据'
ENDIF
MS=MM-1

&&除去三个极端,M值范围是3-MS,即最少取3个数,最多取MS个数。


待续。
2010-01-06 08:13
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
3.建立一个以A0,A1,A2,A3,A4....AN 的表B1,保存数据

4.运行Z03程序段,产生N取3全部组合,把结果放在表B3。
PROCEDURE Z03
*N选3
NA=3
USE B1
COPY TO B3
USE B3
FOR A=1 TO NA
B=A+1
FOR C=B TO NA
D=C+1
FOR E=D TO NA
APPEND BLANK
REPLACE A1 WITH A,A2 WITH C,A3 WITH E
ENDFOR
ENDFOR
ENDFOR
RETURN

5.以B3的每一条纪录,作为数组AR的序号,取出对应的数值,放到表B1,表B1的A0字段存放和。

6.同理,运行Z04程序段,产生N取4全部组合,把结果放在表B4。

PROCEDURE Z04
*N选4
NA=4
USE B1
COPY TO B4
USE LC
FOR A=1 TO NA
B=A+1
FOR C=B TO NA
D=C+1
FOR E=D TO NA
F=E+1
FOR G=F TO NA
APPEND BLANK
REPLACE A1 WITH A,A2 WITH C,A3 WITH E,A4 WITH G
ENDFOR
ENDFOR
ENDFOR
ENDFOR
RETURN

7.以B4的每一条纪录,作为数组AR的序号,取出对应的数值,放到表B1,表B1的A0字段存放和。

8.重复上述方法,直至N取MS。

9. CALCULATE  MAX(A0) TO HJ FOR A0<=H &&HJ就是答案
 
2010-01-06 10:11
快速回复:求助:有一组数字,求任意几个数相加,使的其和等于或接近给定值.请问这个 ...
数据加载中...
 
   



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

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