| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1285 人关注过本帖
标题:几个数相加的问题
只看楼主 加入收藏
wqslianhua
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-4-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
几个数相加的问题
小弟的问题是:
我随便输入4个数"S(1 TO 4"),然后再输入一个数N,如果S(1 TO 4)中有两个或三个或四个数相加等于N,然后就打印出相加等于N的数,我自己写了一个如下
Option Explicit
Private Sub Form_click()
Dim s(1 To 4) As Integer '定议一个数组,存取要输入的三个数
Dim n As Integer '定议要等的数,
Dim i, j, d As Integer '循环用的变量
'输入四个数
For i = 1 To 4
s(i) = InputBox("请输入三个数")
Print s(i)
Next i
n = InputBox("请输入要等的数")
For i = 1 To 4
 For j = i + 1 To 4
  If s(i) + s(j) = n Then
  Print s(i) & "加" & s(j) & "等于" & n,
  ElseIf s(i) * 2 = n Then
    Print s(i) & "加本身等于" & n
   End If
Next j
Next i
End Sub
但是我写的这个只能打印出两个数,如何打印三个,或四个,,,,,,,
搜索更多相关主题的帖子: 相加 
2009-08-06 16:34
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:14 
1、我是用文本框来输入数据,text1(0 - 3) 对应输入的4个数
2、text2 用来输入N
3、text3 设置为 多行模式的文本框,用来显示结果。
4、测试结果
输入的数据为 5,6,4,1
结果为:
5+4+1=10
6+4=10


代码如下
'--------------------------------
Option Explicit
 
Dim s(1 To 4)
Dim N As Long
 
Private Sub Command1_Click()
Dim i As Long
 
For i = 0 To 3
    If IsNumeric(Text1(i).Text) Then
        s(i + 1) = CLng(Text1(i).Text)
    Else
        MsgBox "输入的第 " & i + 1 & " 数据有误", vbCritical
        Exit Sub
    End If
Next i
 
If IsNumeric(Text2.Text) Then
    N = CLng(Text2.Text)
Else
    MsgBox "输入的 N 数据有误", vbCritical
    Exit Sub
End If
 
Dim i1 As Long, i2 As Long, i3 As Long, i4 As Long
Dim o As Long       '和
Dim jg As String
Dim js As Long
 
For i1 = 1 To 5                 '>5代表为此项不使用
    For i2 = i1 + 1 To 5
        For i3 = i2 + 1 To 5
            For i4 = i3 + 1 To 6    '因为第二项可以跑到4,第三项就为5时,为了让循环能继续,这项最大值应该为6
            o = 0
            'js = 0
                 
                '计算和
                If i1 < 5 Then
                    o = o + s(i1)
                    'js = js + 1
                End If
                 
                If i2 < 5 Then
                    o = o + s(i2)
                    'js = js + 1
                End If
                 
                If i3 < 5 Then
                    o = o + s(i3)
                    'js = js + 1
                End If
                If i4 < 5 Then
                    o = o + s(i4)
                    'js = js + 1
                End If
                 
                '防止不足两个数时退出循环,后发现不需要.
                'If js < 2 Then
                '    Exit For
                'End If
                 
                If o = N Then
                    '输出结果
                    jg = ""
                    Debug.Print i1, i2, i3, i4
                    If i1 < 5 Then
                        jg = jg & s(i1) & "+"
                    End If
                    If i2 < 5 Then
                        jg = jg & s(i2) & "+"
                    End If
                    If i3 < 5 Then
                        jg = jg & s(i3) & "+"
                    End If
                    If i4 < 5 Then
                        jg = jg & s(i4) & "+"
                    End If
                     
                    jg = Left(jg, Len(jg) - 1)
                    jg = jg & "=" & o
                     
                    Text3.Text = Text3.Text & jg & vbCrLf
                     
                    '继续下一圈的循环,重复数据不管
                    '因为最后一项为 5 或 6 时,都是同一个数据,所以不管
                    If i4 > 4 Then Exit For
                End If
Next i4, i3, i2, i1        '因为循环之间不需要再执行代码了,所以用总的循环闭合命令
 
End Sub
 

授人于鱼,不如授人于渔
早已停用QQ了
2009-08-08 14:52
wqslianhua
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-4-3
收藏
得分:0 
谢谢2楼的回复,应该是我的问题问的不够祥细,因该是,我要输入N个数,(N不知道多少),再输入一个要等的数M,然后对这N个数进行统计如果N中有几个数相加等于M则把那几个数打印出来,或者N中有哪几个数本身相加等M也打印出来,,
2009-08-15 10:07
solobb
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-2-21
收藏
得分:0 
Dim s(1 To 4) As Integer
Dim sAdd As Integer
Dim i As Integer
Dim j As Integer
Dim i1 As Integer
Dim j1 As Integer
Form1.Cls
s(1) = Val(Text1(0).Text)
s(2) = Val(Text1(1).Text)
s(3) = Val(Text1(2).Text)
s(4) = Val(Text1(3).Text)
For i = 1 To 4
  For j = 1 To 4
    If Val(Text2.Text) = s(i) + s(j) Then
      Print s(i), s(j)
    End If
    For i1 = 1 To 4
      If Val(Text2.Text) = s(i) + s(j) + s(i1) Then
        Print s(i), s(j), s(i1)
      End If
        For j1 = 1 To 4
          If Val(Text2.Text) = s(i) + s(j) + s(i1) + s(j1) Then
            Print s(i), s(j), s(i1), s(j1)
           End If
        Next j1
    Next i1
  Next j
Next i
小弟初次发帖,不知道这样行不?
2009-08-15 11:14
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
1+2+3+4+6+10=26
1+2+3+4+7+9=26
1+2+3+5+6+9=26
1+2+3+5+7+8=26
1+2+4+5+6+8=26
1+2+5+8+10=26
1+2+6+7+10=26
1+2+6+8+9=26
1+3+4+5+6+7=26
1+3+4+8+10=26
1+3+5+7+10=26
1+3+5+8+9=26
1+3+6+7+9=26
1+4+5+6+10=26
1+4+5+7+9=26
1+4+6+7+8=26
1+7+8+10=26
2+3+4+7+10=26
2+3+4+8+9=26
2+3+5+6+10=26
2+3+5+7+9=26
2+3+6+7+8=26
2+4+5+6+9=26
2+4+5+7+8=26
2+6+8+10=26
2+7+8+9=26
3+4+5+6+8=26
3+5+8+10=26
3+6+7+10=26
3+6+8+9=26
4+5+7+10=26
4+5+8+9=26
4+6+7+9=26
5+6+7+8=26

授人于鱼,不如授人于渔
早已停用QQ了
2009-08-15 14:56
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
使用了递归

Option Explicit

Dim M As Long
Dim N() As Long


Private Sub Command1_Click()
On Error GoTo err1:

If IsNumeric(Text2.Text) Then
    M = CLng(Text2.Text)
End If

Dim i As Long
Dim j As String
Dim fj() As String

j = Text1.Text
If InStr(1, j, ",") > 0 Then
    fj = Split(j, ",")
    ReDim N(UBound(fj))
    For i = 0 To UBound(fj)
        N(i) = CLng(fj(i))
    Next i
End If
Text3.Text = ""
Call js("", 0, N)

Exit Sub

err1:

    MsgBox "数据读取的过程中有错误", vbCritical
    Exit Sub

End Sub

Private Sub Command2_Click()
    Unload Me
End Sub



Public Function js(结果1 As String, 结果2 As Long, 数据() As Long) As Boolean

Dim i As Long
Dim j As Long
Dim k As Long

k = UBound(数据)

Dim N2() As Long

For i = 0 To k
    If 结果2 + 数据(i) = M Then     '输出结果
        Text3.Text = Text3.Text & Mid(结果1, 2) & "+" & 数据(i) & "=" & M & vbCrLf
    ElseIf 结果2 + 数据(i) < M Then     '小于M
            If k > i + 1 Then
                ReDim N2(k - i - 1)
            For j = i + 1 To k
                N2(j - i - 1) = 数据(j)
            Next j
            Call js(结果1 & "+" & 数据(i), 结果2 + 数据(i), N2)
        End If
    End If
Next i

End Function

多数相加.rar (2.1 KB)

授人于鱼,不如授人于渔
早已停用QQ了
2009-08-15 14:58
libingchen_2
Rank: 2
等 级:论坛游民
帖 子:22
专家分:62
注 册:2009-8-7
收藏
得分:0 
回复 4楼 solobb

输入1 2 3 4    3
输出 1 1 1     1 2     2 1
2009-08-15 15:04
wqslianhua
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-4-3
收藏
得分:0 
风吹过b 非常感谢你的帮助,代码我已经收了,
虽面做的还不够人性化,,,我自己做修改,谢谢
2009-08-18 16:49
快速回复:几个数相加的问题
数据加载中...
 
   



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

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