Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перебор комбинаций нескольких массивов 
V
    Опции темы
kb64
Дата 15.7.2010, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 2.2.2008

Репутация: нет
Всего: нет



Есть двумерный массив
Код


ArrayList <String> a= {"A","S","D"};
ArrayList <String> b= {"Z","X","C"};


Я понимаю, что есть слово "рекурсия", я знаю что оно обозначает, но не понимаю как сделал перебор вариантов.

String resultstring должна быть:
AZ,
SZ,
DZ,
AX,
SX,
DX
и т.д.
Помогите сделать.

Заранее благодарен. 

PM MAIL   Вверх
ksili
Дата 15.7.2010, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 2
Всего: 17



Зачем рекурсия? 
Просто два вложенных цикла. Один по элементам первого массива, второй по элементам второго массива. В теле цикла создается одна строка.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Silent
Дата 15.7.2010, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 3.10.2006

Репутация: 1
Всего: 9



Нерекурсивный вариант:
Код

for (int i = 0; i < a.size; i++)
  for (int j = 0; j < b.size; j++)
  {
    string resultstring = a[i] + b[j];
    cout << resultstring << endl;
  }


С использованием рекурсии:
Код

void res(int x)
{
  int i = x / b.size;
  int j = x % b.size;
  if ((i < a.size)&&(j < b.size))
  {
    string resultstring = a[i] + b[j];
    cout << resultstring << endl;
    res(x+1);
  }
}

int main()
{
  res(0);
  return 0;
}

PM MAIL   Вверх
kb64
Дата 15.7.2010, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 2.2.2008

Репутация: нет
Всего: нет



Цитата(ksili @ 15.7.2010,  09:52)
Зачем рекурсия? 
Просто два вложенных цикла. Один по элементам первого массива, второй по элементам второго массива. В теле цикла создается одна строка.

Забыл добавить, у меня динамическое число массивов, ибо считываю их из файла.
PM MAIL   Вверх
esperanto
Дата 16.7.2010, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Все равно можно без рекурсии
num_of_variations=arra1.size*array2.size*....;

for i=1 to num_of variations
   encode_num_to_special_combination(i);

end
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0996 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.