问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...来看看。怎么样将一堆数据中 使任意个数据之和等于定值

发布网友 发布时间:16小时前

我来回答

1个回答

热心网友 时间:14小时前

是不是直接和这个差不多:
输入N个数字,输入其中几个数字的和A
需要输出所有和为A的数字的组合
例如:
输入 1,2,3,4,5,6,7,8
输入和 A=9
输出 (1,8),(2,7),(1,2,6)......
要列出所有可能组合,数字不能重复使用
但是如果输入的是3,3,3,3,3
输入和 A=9
输出 (3,3,3),(3,3,3)......
每个3都是不同的
做到不重不漏

刚巧做了个,用递归算法,留个邮箱,我可以把工程发给你

Dim number() As Integer '声明公共数组,本数组用来存储您输入的数
Dim cou As Integer '用来保存输入的数的个数
Dim sum As Integer '用来保存输入的数相加的和
Dim a, n As Integer 'a是您问题上的和A,n是我当前使用的临时数组的个数
Dim lsnumber() As Integer '用来保存正在进行相加的数
Private Sub Form_Load()
cou = 9 '初始化,用户输入了9个数,这个根据您的需要而定
sum = 0 '初始化,和为0
a = 9 '初始化,预计和为9
n = 0 '初始化,当前尚未使用任何lsnumber()数组的空间

ReDim number(cou - 1) As Integer '重定义数组长度,根据cou而定,数组下标从0到cou-1
ReDim lsnumber(cou - 1) As Integer '重定义数组长度,因为无法知道程序究竟用了多少个数相加 _
所以让这个数组的长度等于cou -1

For i = 0 To 8 'for循环用于给数组赋值,这个值您可以自己输入,我为了测试方便,就直接赋值了
number(i) = i + 1
Next
Text1.Text = Text1.Text & "层数 上次的和 这次加的数 和" & vbCrLf
Call searchnum(0) '重点,调用递归函数求解,传递值0给函数使用
End Sub

Function searchnum(ByVal num) '递归函数入口,没用过几次递归,所以就用我习惯的写法写了 _
不会用高手们的写法写
For i = num To cou - 1 '遍历number()数组中的每一个元素,下标从num开始

Text1.Text = Text1.Text & num & " " & sum & "+" '将当前操作的初始数组下标和上次运行得到的值输出到文本框中

sum = sum + number(i) '和累加
lsnumber(n) = number(i) '记录当前用来相加的数

Text1.Text = Text1.Text & number(i) & "=" & sum & vbCrLf '将当前相加的数和得到的结果输出到文本框中

If sum < a Then '如果当前的值小于我输入的和,再次调用这个递归函数
n = n + 1 '用来相加的数的个数加1
searchnum i + 1 '这儿调用自己本身传过去的值时i+1
ElseIf sum = a Then '如果这个和刚好是我输入的和,那么将它输出
pr n '输出这几个数,参见下面的模块
sum = sum - number(i)
'不排除剩下的没被检查过的数中还有和number(i)相等的数,所以继续循环
Else

sum = sum - number(i) '获得上次调用本程序后sum的值

End If
Next
'if语句用文字无法表述清楚,举个例子吧
'假设我有1,2,3三个数,输入的和为4 _
会出现这些算式:1+2+3=6 不满足 _
1+3=4 满足 _
2+3=5 不满足 _
这个程序就是计算了这些算式,每次计算加到3后就跳出这次调用,继续上次调用
If num > 0 Then
sum = sum - number(num - 1) '当这个递归函数要结束时,sum的值应该是上上次调用自身后的值,如果 _
num<=0,数组下标会越界
n = n - 1 '用来相加的数的个数应该减1
End If
End Function

Private Sub pr(ByVal leng) '输出保存在lsnumber()数组中的数
Text1.Text = Text1.Text & "满足要求的数:"
For i = 0 To leng
Text1.Text = Text1.Text & lsnumber(i) & " "
Next
Text1.Text = Text1.Text & vbCrLf
End Sub
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在win10下安装docker? windows(win10)上的docker使用:安装(国内镜像)、操作 win10安装dockerWin10下Docker安装和使用 关于安装配置docker,找不到Hyper-V(win10 家庭版需要配置,专业版不需要... 怎么把微信上的聊天记录转到新手机 怎么把聊天记录转到另一个手机 快递被别人冒领,快递公司有没有责任 洋葱汤洋葱汤 一颗洋葱汤怎么做 一颗洋葱汤怎么做好吃 四个互不相等的整数A.B.C.D,他们的积为4,那么A+B+C+D== a,b,c,d,是四个不同的质数,且a+b+c=d,那么a×b×c×d的最小值是... 恒什么一什么的词语有哪些 恒字去掉偏旁念什么 初级工程师有哪些分类 机械类工程师有哪些啊 助理工程师当中的几大分类 描写流水的语句(流水潺潺,唯美诗意) AnyShareAnyShare简介 乌鲁木齐吉瑞坤商贸有限公司怎么样 安徽省章章电力设计有限公司怎么样? 成都雪绒花环境治理有限公司怎么样? 四川中红工程咨询有限公司怎么样? 乌鲁木齐吉瑞坤商贸有限公司怎么样? 广西吉瑞建设有限公司怎么样? 股权质押融资风险有什么 ...醉卧美人膝.醉乡路常至,他处怎堪行.一醉解千愁,醉死赛封侯.平生唯 ... 关于“三十而立”的古诗词有哪些 己酉新正叶颙注音朗读 已酉端午()拼音版、注音及读音 已知a、b、c、d是四个互不相同的整数,且abcd=25 ...且(a+c)(a+d)=1,(b+c)(b+d)=1,求(a+c)+(b+d)的值 什么钙片利于骨折恢复 老人摔骨折吃点什么好 09款斯巴鲁森林人2.5T发动机报0021故障要怎么解决 有什么档次高一点的杭州特产好推荐的吗? 和平精英 和平精英号怎么借给别人玩? 和平精英 和平精英怎么扫码登录别人账号? 住院只有一个人陪护 医院一个病人一个陪护合理吗 2023上半年青海中小学教师资格证笔试考试时间为什么时候 教师资格证哪些省份是全国统考 人一死,就啥都没有了(活着真好)人生感悟美文 科学发展观深刻认识和回答了新形势下实现什么样的发展怎样发展等重大... 江中猴姑 早餐米稀 奶味525g礼盒装-详细介绍 江中猴姑米稀-养胃早餐,滋养每一刻 江中猴姑米稀-适用对象 江中猴姑米稀的味道怎么样? 江中猴姑米稀的营养怎么样? 江中猴姑米稀-健康养胃,冲饮谷物