4位数字的组合,其个别数字总和为5

时间:2015-08-12 04:45:45

标签: vba combinations permutation factorial

我正在制作一张记分卡,上面有代表4种可能结果的列,例如:

  1. 成功,
  2. 不成功,
  3. 优异,
  4. 其他
  5. 每个工作人员在一个月内对这些评级进行5次评估。所以 1人可能 3成功 2例异常 0不成功 0其他 >

    因此每个结果的最大实例数为5,但实例总数不能超过5个。

    我可以尝试输入所有组合(并弄错它们) - 是否有任何人都知道的函数/公式/ VBA会为我列出所有可能的结果组合?

    e.g. 5000,4100,4010,4001,3200,3020,3002,3110,3011, etc...
    

3 个答案:

答案 0 :(得分:1)

由于您的号码范围可以从00055000,因此您可以编写一个简单的循环来测试每个数字,以查看数字是否为5

Sub GetPermutations()
    Dim i As Long
    For i = 5 To 5000
        If SumDigits(i) = 5 Then Debug.Print Format$(i, "0000")
    Next
End Sub

Function SumDigits(s As Variant) As Long
    Dim i As Long
    For i = 1 To Len(s)
        SumDigits = SumDigits + CLng(Mid$(s, i, 1))
    Next
End Function

可替换地:

Dim w As Long, x As Long, y As Long, z As Long
For w = 0 To 5
For x = 0 To 5
For y = 0 To 5
For z = 0 To 5
    If w + x + y + z = 5 Then Debug.Print w & x & y & z
Next
Next
Next
Next

答案 1 :(得分:0)

C#:

// numbering 1 to 4 - i.e.
// 1 sucessful, 2 unsucessful, 3 exception, 4 other
for(int i=1;i<4;i++)
{
 for(int n=1;n<4;n++)
 {
  for(int d=1;d<4;d++)
  {
   for(int q=1;q<4;q++)
   {
    if(i+d+n+q<=5)
     Console.WriteLine(i+n+d+q+", ");
   }
  }
 }
}

编辑:刚看到你问过vba:

For number1 As Integer = 1 To 4 Step 1
 For number2 As Integer = 1 To 4 Step 1
  For number3 As Integer = 1 To 4 Step 1
   For number4 As Integer = 1 To 4 Step 1
    if(number1+number2+number3+number4<=5) Then
     Debug.WriteLine(number1.ToString & number2.toString &number3.toString &number4.ToString & ",");
    End If
   Next number4
  Next number3
 Next number2
Next number1  

我能想到的最简单的解决方案,虽然可能会更好。

答案 2 :(得分:0)

感谢大家的帮助 - 我设法使用一个建议组合,从数字1开始,自动填充到5000,然后&#34;文本到列&#34;,固定宽度以分隔数字,总和到5,过滤和嘿presto!似乎产生了正确数量的可能组合,最多可增加5个。

再次感谢您的帮助!