-
Задачка для программистов
Задание следующее:
Есть неизвестное заранее число одномерных массивов с неизвестным количеством элементов в каждом. Например
м1(а,б,в)
м2(г,д,е,ж)
м3(и)
...
Нужно написать функцию которая напечатает все возможные комбинации элементов этих массивов без перестановок. Т.е. элементы первого массива всегда на первом месте, элементы второго всегда на втором и т.п.
Типа:
аги
ади
аеи
ажи
бги
...
-
Будь в курсе!
Будь в курсе!
Надоело быть жертвой? Стань профи по информационной безопасности, получай самую свежую информацию об угрозах и средствах защиты от ведущего российского аналитического центра Anti-Malware.ru:
-
Что-то вроде такого, я думаю
Код:
// Объявляем массив как элемент связанного списка
struct array_t
{
string s[];
int size;
array_t* next;
}
// Обрабатываем текущий элемент связанного списка
function do(string s, array_t* p)
{
for (int i=0; i<p->size; i++)
{
// Обрабатываем текущий элемент массива
s += p->s[i];
// переходим к следующему элементу связанного списка
if (p->next) do(s, p->next);
}
}
-
У-уууу. Над этим надо подумать. Я не могу дать свой ответ так быстро
Павел
AVZ HijackThis помощь с 10-00 до 18-00МСК
Windows7, SEP(work)
WindowsXP KIS(home)
На up не реагирую
-
Без рекурсии.
PHP код:
void printem(in char[][] rgs)
{
uint[] idx=new uint[rgs.length];
while(true)
{
foreach(i,rg;rgs)write(rg[idx[i]]);
writeln("");
foreach_reverse(i,ref val;idx)
{
if(val==rgs[i].length-1)
{
val=0;
if(i==0)return;
}
else { val++; break; }
}
}
}
Последний раз редактировалось maXmo; 11.11.2008 в 11:57.
-
В общем я понял что плохо знаю С++ и без комментов не пойму
Проверено, работает?
Я сделал с рекурсией на ПХП
PHP код:
function combinations($array,$string) {
$tmp=array_shift($array);
foreach($tmp AS $value) {
$newstring=$string.$value;
if(count($array)>0) combinations($array,$newstring);
if(count($array)==0) print $newstring."\n";
}
}
-
на пых мой код, боюсь, не перевести Хотя… как знать.
PHP код:
printem([['a','i','u','e','o'],['m','r','e'],['u']]);
Код:
amu
aru
aeu
imu
iru
ieu
umu
uru
ueu
emu
eru
eeu
omu
oru
oeu
-
Сообщение от
maXmo
на пых мой код, боюсь, не перевести
Хотя… как знать.
Круть. А я без рекурсии не додумался как сделать
-
работает и ладно
Добавлено через 4 минуты
Сообщение от
Geser
Круть. А я без рекурсии не додумался как сделать
идея такова, что idx содержит индексы для массивов и представляет собой число в смешанной системе счисления, собственно второй цикл – специальный алгоритм для увеличения этого числа на единицу. Сложение с единицей столбиком
Первый цикл – вывод текущего числа, но «цифры» заменяются элементами из массивов. Если в функцию передать [['0','1','2'...'9'],['0','1','2'...'9']] – распечатает все двузначные десятичные числа.
Добавлено через 6 минут
В качестве бонуса этот метод также позволяет последовательно пронумеровать все комбинации.
Последний раз редактировалось maXmo; 12.11.2008 в 12:51.
Причина: Добавлено