Показано с 1 по 8 из 8.

Задачка для программистов

  1. #1
    Geser
    Guest

    Задачка для программистов

    Задание следующее:
    Есть неизвестное заранее число одномерных массивов с неизвестным количеством элементов в каждом. Например
    м1(а,б,в)
    м2(г,д,е,ж)
    м3(и)
    ...
    Нужно написать функцию которая напечатает все возможные комбинации элементов этих массивов без перестановок. Т.е. элементы первого массива всегда на первом месте, элементы второго всегда на втором и т.п.
    Типа:
    аги
    ади
    аеи
    ажи
    бги
    ...

  2. Будь в курсе!
    Реклама на VirusInfo

    Надоело быть жертвой? Стань профи по информационной безопасности, получай самую свежую информацию об угрозах и средствах защиты от ведущего российского аналитического центра Anti-Malware.ru:

    Anti-Malware Telegram
     

  3. #2
    Expert Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для DVi
    Регистрация
    28.08.2006
    Адрес
    moscow
    Сообщений
    3,698
    Вес репутации
    2174
    Что-то вроде такого, я думаю
    Код:
    // Объявляем массив как элемент связанного списка
    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);
      }
    }

  4. #3
    VIP Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация
    Регистрация
    07.07.2005
    Адрес
    Moscow region
    Сообщений
    30,462
    Вес репутации
    2522
    У-уууу. Над этим надо подумать. Я не могу дать свой ответ так быстро
    Павел
    AVZ HijackThis помощь с 10-00 до 18-00МСК

    Windows7, SEP(work)
    WindowsXP KIS(home)

    На up не реагирую

  5. #4
    Senior Member Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для maXmo
    Регистрация
    21.09.2004
    Сообщений
    1,411
    Вес репутации
    315
    Без рекурсии.
    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.

  6. #5
    Geser
    Guest
    В общем я понял что плохо знаю С++ и без комментов не пойму
    Проверено, работает?
    Я сделал с рекурсией на ПХП
    PHP код:
    function combinations($array,$string) {
        
    $tmp=array_shift($array);
        foreach(
    $tmp AS $value) {
            
    $newstring=$string.$value;
            if(
    count($array)>0combinations($array,$newstring);
            if(
    count($array)==0) print $newstring."\n";
        }


  7. #6
    Senior Member Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для maXmo
    Регистрация
    21.09.2004
    Сообщений
    1,411
    Вес репутации
    315
    на пых мой код, боюсь, не перевести Хотя… как знать.
    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

  8. #7
    Geser
    Guest
    Цитата Сообщение от maXmo Посмотреть сообщение
    на пых мой код, боюсь, не перевести Хотя… как знать.
    Круть. А я без рекурсии не додумался как сделать

  9. #8
    Senior Member Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для maXmo
    Регистрация
    21.09.2004
    Сообщений
    1,411
    Вес репутации
    315
    работает и ладно

    Добавлено через 4 минуты

    Цитата Сообщение от Geser Посмотреть сообщение
    Круть. А я без рекурсии не додумался как сделать
    идея такова, что idx содержит индексы для массивов и представляет собой число в смешанной системе счисления, собственно второй цикл – специальный алгоритм для увеличения этого числа на единицу. Сложение с единицей столбиком
    Первый цикл – вывод текущего числа, но «цифры» заменяются элементами из массивов. Если в функцию передать [['0','1','2'...'9'],['0','1','2'...'9']] – распечатает все двузначные десятичные числа.

    Добавлено через 6 минут

    В качестве бонуса этот метод также позволяет последовательно пронумеровать все комбинации.
    Последний раз редактировалось maXmo; 12.11.2008 в 12:51. Причина: Добавлено

Похожие темы

  1. Ответов: 4
    Последнее сообщение: 31.01.2010, 21:31
  2. Ответов: 4
    Последнее сообщение: 30.12.2009, 16:40

Свернуть/Развернуть Ваши права в разделе

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Page generated in 0.00780 seconds with 16 queries