| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 179 人关注过本帖
标题:凑数求助
只看楼主 加入收藏
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2244
专家分:3960
注 册:2007-4-27
结帖率:95.95%
收藏
已结贴  问题点数:100 回复次数:8 
凑数求助
ls.rar (1.22 KB)


现有一列数值,共317个数,要凑出 19138.92 ,在317个数值中,挑哪几个正好能凑到 19138.92   
详见附件
求大侠,能给出代码,不胜感激,谢谢!
搜索更多相关主题的帖子: 个数 代码 附件 不胜感激 一列 
4 天前 14:23
dglhz
Rank: 2
来 自:东莞南城
等 级:论坛游民
威 望:1
帖 子:14
专家分:99
注 册:2022-5-7
收藏
得分:35 
笨方法:
SELECT ddje,0 s1 FROM ls ORDER BY ddje desc INTO CURSOR tmp11 readwrite
LOCAL _je0,_je1,_v11,_r11
_v11=0
_je0=19138.92

SELECT tmp11
FOR _r11= 1 TO RECCOUNT('tmp11')
_je1=0
    SCAN FOR s1<9
        IF _je1=0
            _je1=_je0-ddje
        ELSE
            IF _je1-ddje<0
                LOOP
            ELSE
                _je1=_je1-ddje
            ENDIF
        ENDIF

        DO CASE
        CASE _je1>0
            REPLACE s1 WITH 1
        CASE _je1=0
            REPLACE s1 WITH 1
            _v11=1
            exit
        OTHERWISE
            EXIT
        ENDCASE
    ENDSCAN
    IF _v11=1
        SELECT ddje FROM tmp11 WHERE s1=1 INTO CURSOR tmp12
        EXIT
    ELSE
        REPLACE s1 WITH 9 FOR RECNO()=_r11
    ENDIF
endf
IF _v11=1
    MESSAGEbox('凑数成功')
    SELECT tmp12
    brow
ELSE
    MESSAGEbox('凑数失败')
ENDIF
4 天前 15:46
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1836
专家分:3536
注 册:2012-2-29
收藏
得分:10 
回复 2楼 dglhz
可行,谢谢分享!
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2025-1-18 06:25编辑过]

3 天前 06:21
星光悠蓝
Rank: 9Rank: 9Rank: 9
来 自:山水甲天下
等 级:贵宾
威 望:52
帖 子:528
专家分:1296
注 册:2010-1-11
收藏
得分:15 
有好多种组合,是什么用途?
图片附件: 游客没有浏览图片的权限,请 登录注册
3 天前 18:01
wcx_cc
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:401
专家分:1287
注 册:2015-10-2
收藏
得分:10 
要想全部数据搜索完毕,这是一个庞大的组合,应该使用淘汰法
3 天前 22:21
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:333
专家分:538
注 册:2019-10-11
收藏
得分:30 
网上东拼西凑的代码,使用excel的规划求解,遗憾的是只支持200个数值
TEXT TO vbaCode TEXTMERGE NOSHOW PRETEXT 7
Sub LoadSolver()
    on error resume next
    With Application
        .SendKeys "~"
        .CommandBars.FindControl(ID:=3627).Execute
    End With
    Application.ScreenUpdating = True
    AddIns("规划求解加载项").Installed = True
    AddIns("Solver Add-in").Installed = True
    With ThisWorkbook.VBProject
        For i = 1 To .References.Count
            If .References(i).Name = "Solver" Then
                Exit Sub
            Else
                If i = .References.Count Then
                    ThisWorkbook.VBProject.References.AddFromFile Application.path & "\Library\SOLVER\SOLVER.XLAM"
                End If
            End If
        Next i
    End With
End Sub

Sub UnloadSolver()
    On Error Resume Next
    ThisWorkbook.VBProject.References.Remove ThisWorkbook.VBProject.References("Solver")
    AddIns("规划求解加载项").Installed = False
    AddIns("Solver Add-in").Installed = False
End Sub

Sub sds(maxcell As String)
    On Error Resume Next
    SolverReset
    SolverOk SetCell:="c1", MaxMinVal:=3, ValueOf:=19138.92, ByChange:="B1:B" & maxcell, Engine:=2, EngineDesc:="单纯形 LP"
    SolverOk SetCell:="c1", MaxMinVal:=3, ValueOf:=19138.92, ByChange:="B1:B" & maxcell, Engine:=2, EngineDesc:="Simplex LP"
    SolverAdd CellRef:="B1:B" & maxcell, Relation:=5
    SolverSolve UserFinish:=True,ShowRef:="ShowTrial"
    Range("B1:B" & maxcell).AutoFilter Field:=1, Criteria1:="1"
End Sub

Function ShowTrial(Reason As Integer)
    MsgBox Reason
    ShowTrial = 0
End Function

ENDTEXT

oExcel = CREATEOBJECT("Excel.Application")
oExcel.Visible = 1
regKey = "HKEY_CURRENT_USER\Software\Microsoft\Office\"+oExcel.Version+"\Excel\Security\AccessVBOM"
se = CREATEOBJECT("WScript.Shell")
se.RegWrite(regKey, 1, "REG_DWORD")
oExcel.DisplayAlerts = 0
oExcel.WorkBooks.Add
USE ls
WITH oExcel
    scan
        .cells(RECNO(),1).value=ddje
    ENDSCAN
    maxcell=TRANSFORM(MIN(200,RECCOUNT()))  &&最多支持200个
    .cells(1,3).Formula = "=SUMPRODUCT(a1:a"+maxcell+",b1:b"+maxcell+")"
ENDWITH
myModule = oExcel.ActiveWorkbook.VBProject.VBComponents.Add(1)  && vbext_ct_StdModule = 1
myModule.CodeModule.AddFromString(vbaCode)
oExcel.Run("LoadSolver")
oexcel.Run('sds',maxcell)
**oexcel.Run('ArrayFill', @arrEsj)  && @arrEsj是这个宏的参数.
oExcel.ActiveWorkbook.VBProject.VBComponents.Remove(myModule)
se.RegWrite(regKey, 0, "REG_DWORD")
retu
前天 20:59
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2244
专家分:3960
注 册:2007-4-27
收藏
得分:0 
感谢各位的大力帮助!

只求每天有一丁点儿的进步就可以了
昨天 10:37
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2244
专家分:3960
注 册:2007-4-27
收藏
得分:0 
回复 4楼 星光悠蓝
对方多张订单的数据一起给了,要还原订单而要凑数(做账需要)

只求每天有一丁点儿的进步就可以了
昨天 10:39
凝聚双眼
Rank: 2
等 级:论坛游民
帖 子:49
专家分:43
注 册:2023-12-1
收藏
得分:0 
蛇来运转,万事胜意!
1 小时前
快速回复:凑数求助
数据加载中...
 
   



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

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