循环通过所有可能的方法来获得正确猜测中的x

时间:2017-06-08 03:41:57

标签: loops math combinations probability

我有10个物体。每个对象可以处于3个状态,1,2或3.让我们取结果1111111111.对于那个结果(或任何其他),我试图循环通过所有方式可以获得8个结果10个猜测是正确的。例如,2111211111将是其中之一。我已经设法通过下面的循环将其与9/10一起使用,但我需要帮助才能让它与8/10和7/10一起工作。

为简单起见,我们假设我们检查的唯一组合是1111111111。

    Dim incorrectcombos As New Text.StringBuilder
    For i = 2 To 3
        For j = 0 To 9
            Dim combo As New Text.StringBuilder
            For k = 0 To 9
                If k = j Then
                    combo.Append(i)
                Else
                    combo.Append(1)
                End If
            Next
            incorrectcombos.AppendLine(combo.ToString)
        Next
    Next
    MessageBox.Show(incorrectcombos.ToString)

1 个答案:

答案 0 :(得分:1)

递归方法非常简单。 Delphi代码(注意Delphi字符串是基于1的)

  procedure GenerateCombs(s: string; MaxLen, Position, ErrCount: Integer);
  begin
    if Position = MaxLen + 1 then
      Memo1.Lines.Add(s)   //output string
    else begin
      if ErrCount <= MaxLen - Position then  
        GenerateCombs(s + '1', MaxLen, Position + 1, ErrCount);
      if ErrCount > 0 then begin
        GenerateCombs(s + '2', MaxLen, Position + 1, ErrCount - 1);
        GenerateCombs(s + '3', MaxLen, Position + 1, ErrCount - 1);
      end;
    end;
  end;

begin
  GenerateCombs('', 4, 1, 2);

产生

1122
1123
1132
1133
1212
1213
1221
1231
1312
1313
1321
1331
2112
2113
2121
2131
2211
2311
3112
3113
3121
3131
3211
3311

C#(ideone):

using System;

public class Test
{
        static public void GenerateCombs(string s, int MaxLen, int Position, int ErrCount) 
        {
          if (Position == MaxLen + 1) 
            {
                Console.WriteLine(s);
                return;
            }

         if (ErrCount <= MaxLen - Position)
         { 
              GenerateCombs(s + "1", MaxLen, Position + 1, ErrCount);
         }

          if (ErrCount > 0)
           {
              GenerateCombs(s + "2", MaxLen, Position + 1, ErrCount - 1);
              GenerateCombs(s + "3", MaxLen, Position + 1, ErrCount - 1);
           } 
        }

    public static void Main()
    {
        GenerateCombs("", 4, 1, 2);
    }
}