За последние 24 часа нас посетили 18653 программиста и 1599 роботов. Сейчас ищут 995 программистов ...

Выбрать уникальный комбинации по 5 чисел из 100 чисел

Тема в разделе "PHP для новичков", создана пользователем inline, 2 сен 2010.

  1. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Помогите решить задачку!

    Есть 100 чисел 1, 2, 3, .. n .. 99, 100

    Нужно выбрать уникальные комбинации по 5 чисел

    Можно так n+5*i+i, i от 1 до 5

    Каким еще способом?
     
  2. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    можно рандомные числа использовать. создаем массив из пяти элементов, которые тоже массивы.
    два-три вложенных цикла.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    inline
    создать массив с числами. массив с флагами занято/свободно

    рандом, если число занято - еще раз ( в бесконечном цикле ), если свободно - пишем

    тупо но в 2010 году по скорости большой разницы с умным алгоритмом не будет...
     
  4. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    igordata
    если имеется в виду, что числа вообще не должны повторяться, то да.
    тогда задача не до конца сформулирована, ибо
    1 3 4 5 6
    1 4 5 6 7
    тоже уникальные комбинации относительно друг друга.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    PHP:
    1. <?php
    2. $a = array();
    3.  
    4. for ($i = 0; $i < 5; $i++) {
    5.   $b = rand (1,100);
    6.   if (in_array($b, $a)) {
    7.     $i--;
    8.   } else {
    9.     $a[]=$b;
    10.   }
    11. }
    12.  
    13. ?>
     
  6. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    igordata
    engager
    в каждой комбинации не должно быть два одинаковые числа

    сколько таких комбинаций можно построить из 100 чисел 1, 2, 3, .. n .. 99, 100

    вроде только 20

    или не правильно подсчитал?
     
  7. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тогда см первый мой пост
     
  9. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Volt(220)
    та формула не дасть правильный результат
    она подсчитывает все возможный комбинации
    а нужно
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    inline
    Вы что, готовый код просите? Или вам нужен совет?
     
  11. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Сочетания без повторений — комбинаторные соединения из n элементов по m, составленные из этих элементов и отличающиеся друг от друга только составом.

    Сочетания с повторениями — комбинаторные соединения из n элементов по m, составленные из этих элементов без учета порядка с возможностью многократного повторения предметов.
     
  12. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    по такой формуле из 100 чисел 75 млн. вариантов
    такого быть не может
     
  13. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    там код писать несколько строчек
    мне суть понять как (в смысле формулу вывести)
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я изложил простейший способ =) чем он вам не нра?

    inline
    такого быть не может
    если 1,2,3 и 3,2,1 - разные, то может.
     
  15. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    1,2,3 и 3,2,1 одно и тоже
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну и вперед тогда массив с флагами свободен/занят и цикл
     
  17. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Да нет все верно. Их действительно 75287520.
     
  18. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Volt(220)
    следуя формуле из 7 чисел по 5 в комбинации
    можно сделать 21 разный вариант
    по моему 1
    если нужно, чтобы более двух повторений одного числа небыло

    12345
    1267 и все 3,4,5 поставить и уже более двух повторений
     
  19. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Создаём множество из 100 чисел и делим его на 20 подмножеств.
    В чём проблема?
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    о! я вспомнил
    сделать массив

    for ($i... { $a[] = $i;}

    потом array_rand($a), а потом array_shift($a) из него по пять раз до упора
     
  21. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Одна комбинация это - 12345.
    12345 и 12346 это уже две комбинации и в каждой из них нет одинаковых чисел.
     
  22. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    igordata
    Можно немного проще.
    тот же массив, его array_shift, а затем формулой из начала:
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Я так думаю нужны рандомные? ибо иначе его можно почикать подряд
     
  24. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    igordata
    Я array_shift с shuffle перепутал.
     
  25. inline

    inline Активный пользователь

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    в одной и второй 1234 повторяется