VB.NET: генерировать все возможные слова в файле - PullRequest
0 голосов
/ 10 декабря 2011

Пример:

Если получено слово "don", то файл будет содержать

ddd
ddo
ddn
dod
doo
don
dnd
dno
dnn
odd
odo
odn
ood
<...>

Я понятия не имею, чтобы сделать это. Не менее 3-х символов слова.

1 Ответ

1 голос
/ 10 декабря 2011

Я представил решение в Experts Exchange, которое вы, возможно, не сможете увидеть (если вы никогда его не оплачивали), поэтому я скопировал его для вас:

Вопрос был: у меня есть n элементов, и каждый элементбыть назначен 1 или 2. Поэтому я хотел бы получить матричный результат, который будет генерировать все возможные комбинации.

Например.если n = 3, то возможны следующие результаты: мне нужен алгоритм, который может генерировать этот ряд для n.Пожалуйста, помогите спасибо.в идеале я хотел бы сохранить результат в виде данных

 1 1 1
 1 1 2
 1 2 1
 2 1 1
 2 1 2
 1 2 2
 2 2 1
 2 2 2

Ответ:

    Dim HighestValue As Integer = 2 ' max value
    Dim NrOfValues As Integer = 3 ' nr of values in one result
    Dim Values(NrOfValues) As Integer
    Dim i As Integer
    For i = 0 To NrOfValues - 1
        Values(i) = 1
    Next
    Values(NrOfValues - 1) = 0 ' to generate first as ALL 1
    For i = 1 To HighestValue ^ NrOfValues
        Values(NrOfValues - 1) += 1
        For j As Integer = NrOfValues - 1 To 0 Step -1
            If Values(j) > HighestValue Then
                Values(j) = 1
                Values(j - 1) += 1
            End If
        Next
        Dim Result As String = ""
        For j As Integer = 0 To NrOfValues - 1
            Result = Result & CStr(Values(j))
        Next
        Debug.WriteLine(Result)
    Next

Ok Вот решение, вам просто нужно изменить Debug.Writeline с записью в вашфайл

    Dim HighestValue As Integer = 3 ' max value
    Dim NrOfValues As Integer = 3 ' nr of values in one result
    Dim Values(NrOfValues) As Integer
    Dim i As Integer
    For i = 0 To NrOfValues - 1
        Values(i) = 1
    Next
    Values(NrOfValues - 1) = 0 ' to generate first as ALL 1
    For i = 1 To HighestValue ^ NrOfValues
        Values(NrOfValues - 1) += 1
        For j As Integer = NrOfValues - 1 To 0 Step -1
            If Values(j) > HighestValue Then
                Values(j) = 1
                Values(j - 1) += 1
            End If
        Next
        Dim Result As String = ""
        For j As Integer = 0 To NrOfValues - 1
            If Values(j) = 1 Then Result = Result & "d"
            If Values(j) = 2 Then Result = Result & "o"
            If Values(j) = 3 Then Result = Result & "n"
            'Result = Result & CStr(Values(j))
        Next
        Debug.WriteLine(Result)
    Next
...