Все возможные перестановки из трех-шести разных строк - PullRequest
0 голосов
/ 23 июня 2011

Все, я уже два дня бью головой об стену.У меня есть googled и googled , и я не могу найти решение.Вот что у меня есть:

У меня есть от двух до шести различных строковых массивов (в зависимости от выбора пользователя), но для этого вопроса давайте предположим 3 отдельных строковых массива:

  • Array1 -Том, Дик, Гарри
  • Array2 - ест, готовит, пьет
  • Array3 - Суп, сода, салат

Я хочу, чтобы полученный массив содержал все возможные комбинациииз этих трех строковых массивов, но я не хочу объединять значения, содержащиеся в том же списке (нет: Том Дик Гарри).Вот как я получил получившийся массив:


  1. Tom Eats Soup
  2. Tom Eats Soda
  3. Tom Eats Salad
  4. Член ест суп
  5. член ест газировку
  6. член ест салат
  7. гарри ест суп
  8. гарри ест газету
  9. гарри ест салат

Я ищу решение VB6, но я был бы признателен за решение или алгоритм в большинстве других языков программирования.

Заранее благодарю за полезные советы.

1 Ответ

5 голосов
/ 23 июня 2011

Если это все, что вам нужно сделать, просто сделайте тройной вложенный цикл for:

for(int i = 0; i < 3; i++) {
    for(int j = 0; j < 3; j++) {
         for(int k = 0; k < 3; k++) {
             output array1[i] + " " array2[j] + " " + array3[k]; 
         }  
    }
}

Вы можете перевести на VB6.Современные языки, такие как C # и VB.NET, позволят вам выразить это более красиво:

string[] names = new[] { "Tom", "Dick", "Harry" };
string[] verbs = new[] { "Eats", "Cooks", "Drinks" };
string[] foods = new[] { "Soup", "Soda", "Salad" };

var combinations = from name in names
                   from verb in verbs
                   from food in foods
                   select String.Join(" ", new[] { name, verb, food });

foreach(var combination in combinations) {
    Console.WriteLine(combination);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...