powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перебор 500 000 строк
89 сообщений из 89, показаны все 4 страниц
Перебор 500 000 строк
    #38031239
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Есть задача генерации лотерейных билетов. Один билет 6 цифр. Билетов 500 000. Комбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения. Если ехать простым for или через linq по массивам, получается очень долго, т.к. каждый раз надо проверять, есть ли совпадения в комбинациях или нет и если есть, комбинацию надо перегенерировать.
Исходя из этого вопрос, есть ли какой-то более быстрый способ проверки наличия набора значений в массиве данных?
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031269
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
25 и 11 - это цифры?
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031286
dzone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверяй не каждую цифру а хеш отсортированной строки, например "156981125".GetHashCode() в массиве хешей уже созданных билетов. думаю ускорит.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031288
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первое, что в голову пришло: отсортировать, сформировать строку "1 5 6 9 8 11 25", взять от неё хэш и использовать в качестве ключа комбинации.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031289
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dzone, только разделитель между цифрами в строке нужен :)
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031305
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskini,
Вы не поняли задачу, лотерейные билеты - один билет имеет идентификатор из шесть цифр пример 000001, 0000002 и тд.
задача простая от 0 до 500 000 простой инкремент, забить пустые регистры нулями.
То что вы написали 1 5 6 9 8 11 25, вы будете удивлены но тут 9 цифр, они никак не укладываются в ваше задание.
Вы путаете число с цифрой, номер это также комбинация из цифр, уникальность номера тут можно развести холивар
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031309
FreeFire
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,

массив случайных цифр от 1 1 1 1 1 1 1 до 9 9 9 9 9 9 9
или просто цифр и потом их перемешать
не?
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031537
svh.serjo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Взаимоисключающие условия. Если "причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11", то будет и 1 2 3 4 5 6 равно 6 5 4 3 2 1,etc. Что уменьшает количество возможных комбинаций в разы. (0 0 0 0 0 1 = 0 0 0 0 1 0 = 0 0 0 1 0 0 = 0 0 1 0 0 0 = 0 1 0 0 0 0 = 1 0 0 0 0 0). Так что Вы определитесь - у Вас там 6 ЦИФР или 6 ЧИСЕЛ? И уже после этого задавайте вопрос, как Вам сгенерить случайный массив.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031592
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dzoneПроверяй не каждую цифру а хеш отсортированной строки, например "156981125".GetHashCode() в массиве хешей уже созданных билетов. думаю ускорит.
Да, возможно это ускорит, я тоже думал про хеши, попробую
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031593
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиizoldov-roskini,
Вы не поняли задачу, лотерейные билеты - один билет имеет идентификатор из шесть цифр пример 000001, 0000002 и тд.
задача простая от 0 до 500 000 простой инкремент, забить пустые регистры нулями.
То что вы написали 1 5 6 9 8 11 25, вы будете удивлены но тут 9 цифр, они никак не укладываются в ваше задание.
Вы путаете число с цифрой, номер это также комбинация из цифр, уникальность номера тут можно развести холивар

Я говорю не о номере билета, а о игровой комбинации, я в первом посте все верно написал
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031601
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskiniДобрый день. Есть задача генерации лотерейных билетов. Один билет 6 цифр. Билетов 500 000. Комбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения. Если ехать простым for или через linq по массивам, получается очень долго, т.к. каждый раз надо проверять, есть ли совпадения в комбинациях или нет и если есть, комбинацию надо перегенерировать.
Исходя из этого вопрос, есть ли какой-то более быстрый способ проверки наличия набора значений в массиве данных?Отвечая на заданный вопрос - есть: использовать упорядоченные массивы.

Другое дело, что, ИМХО, практичнее сначала сгенерировать 500000 неповторяющихся чисел, каждое из которых потом превращать в набор номеров. Или сразу использовать процесс генерации, в принципе не допускающий повторов.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031619
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskiniДобрый день. Есть задача генерации лотерейных билетов. Один билет 6 цифр
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031628
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abstraction,
вы определитесь, что есть цифра, что есть число - это разные понятия.
вы блондинка?
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031631
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abstraction, извиняюсь, это не вам, а ТС
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031643
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиAbstraction,
вы определитесь, что есть цифра, что есть число - это разные понятия. *вежливо*
Спасибо, я в общих чертах в курсе. Слезьте уже с белого носорога.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031662
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abstraction,
значит вы блондинка, если в общих чертах
а по теме что вы виртуально представляете
никакой тут рандоминизации и проверок не надо
просто простой инкримент
1,2,3,4,5,6
7,8,9,10,11,12
..........
.......... uint.max();
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031666
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abstraction,
я по моему извинился перед вами, что запостил ответ вместо автору вам.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031677
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиAbstraction,
значит вы блондинка, если в общих чертах
а по теме что вы виртуально представляете
никакой тут рандоминизации и проверок не надо
просто простой инкримент
1,2,3,4,5,6
7,8,9,10,11,12
..........
.......... uint.max();Подсказка: номера в лото и подобных играх обычно ограничены сверху - раз, комбинации должны быть случайными - два. Хотя ТС обо всём этом предоставляет догадываться отвечающим, да.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031693
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abstraction,
в том то и дело, что автор не указал ничего, и что у него цифры и число и номер, это одно и тоже.
ЕГЭ еще не то с людьми может сделать ))
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38031719
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskiniДобрый день. Есть задача генерации лотерейных билетов. Один билет 6 цифр. Билетов 500 000. Комбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения. Если ехать простым for или через linq по массивам, получается очень долго, т.к. каждый раз надо проверять, есть ли совпадения в комбинациях или нет и если есть, комбинацию надо перегенерировать.
Исходя из этого вопрос, есть ли какой-то более быстрый способ проверки наличия набора значений в массиве данных?

Ты бы лучше ссылку на правила проведения лотереи дал, они должны быть доступны, чем пытаться своими словами излагать.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032058
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbstractionГде-то в степиAbstraction,
значит вы блондинка, если в общих чертах
а по теме что вы виртуально представляете
никакой тут рандоминизации и проверок не надо
просто простой инкримент
1,2,3,4,5,6
7,8,9,10,11,12
..........
.......... uint.max();Подсказка: номера в лото и подобных играх обычно ограничены сверху - раз, комбинации должны быть случайными - два. Хотя ТС обо всём этом предоставляет догадываться отвечающим, да.
если число ограничить двумя порядками , и требовать что бы в массиве не повторялось число ( оно было бы уникальным для всего массива массивов) задача вообще не имеет решения ибо мы сможем получить только 99/6 массивов и все....
что имел ввиду автор, так и осталось загадкой....
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032064
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу использования GetHashCode(), не годится:
Код: sql
1.
Если два строковых объекта равны, метод GetHashCode возвращает одинаковые значения.Однако не существует уникального значения хэш-кода для каждого уникального строкового значения.Различные строки могут возвращать одинаковый хэш-код.


Это из MSDN, выход я нашел, делаем строку вида 1 2 3 4 45 26 15 и заталкиваем в массив, а потом просто проверяем наличие строки в массиве, Hash тут в принципе не нужен
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032094
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиAbstractionпропущено...
Подсказка: номера в лото и подобных играх обычно ограничены сверху - раз, комбинации должны быть случайными - два. Хотя ТС обо всём этом предоставляет догадываться отвечающим, да.
если число ограничить двумя порядками , и требовать что бы в массиве не повторялось число ( оно было бы уникальным для всего массива массивов) задача вообще не имеет решения ибо мы сможем получить только 99/6 массивов и все....
что имел ввиду автор, так и осталось загадкой....Что должны быть уникальные комбинации. Поскольку числа обычно от 1 до 90, то имеем 622614630 возможных вариантов. Также, полагаю, автор хочет, чтобы вероятности возникновения в серии каждого из возможных вариантов были с хорошей точностью равны, корреляция варианта с номером билета отсутствовала, корреляция вариантов на соседних билетах отсутствовала.
Будет не лень - вечером напишу алгоритм за линейное время.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032112
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abstraction,
понял, если автор под цифрой имеет ввиду число а их в билете 6 чисел, то почему он везде в примерах оперирует
таким видом . "Комбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения" тут же везде по семь чисел? и второе, имхо было бы правильно делать выравнивание нулем, ну а так параллели и словарь.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032130
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskiniПо поводу использования GetHashCode(), не годится:
Код: sql
1.
Если два строковых объекта равны, метод GetHashCode возвращает одинаковые значения.Однако не существует уникального значения хэш-кода для каждого уникального строкового значения.Различные строки могут возвращать одинаковый хэш-код.


Это из MSDN, выход я нашел, делаем строку вида 1 2 3 4 45 26 15 и заталкиваем в массив, а потом просто проверяем наличие строки в массиве, Hash тут в принципе не нужен

Чёт вы не то написали.
Вот если числа отсортировать по возрастанию(1 2 3 4 15 26 45) , то тогда потом действительно можно просто сравнивать строки.

А какая у вас лотерейная система? Что это 6 из 49 + доп.число + суперчисло или 6 из 45 просто или ещё какая?
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032139
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиAbstraction,
понял, если автор под цифрой имеет ввиду число а их в билете 6 чисел, то почему он везде в примерах оперирует
таким видом . "Комбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения" тут же везде по семь чисел? и второе, имхо было бы правильно делать выравнивание нулем, ну а так параллели и словарь.

Я ж говорю - сильно похоже на 6 из 49 + доп.число + суперчисло(но оно выбирается системой а не игроком)
Допчисло играет только тогда когда угаданы не менее 3 чисел.
Тогда 3 угаданных числа дают выигрыш допустим 10 нерублей,
а 3 угаданных числа + доп.число дают выигрыш допустим 20 нерублей.
Так "размазывается" призовой фонд по большему числу классов.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032157
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234,
а понял, автор хочет купить 500 000 билетов, и ему надо заполнить 6 из 49 плюс 1 итого семь в массиве..
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032176
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234,
Я то грешным делом подумал что лотерея это образное понятие, 6 цифр это ID билета,( были всякие лотереи Досаф, госзаймы( мсу должен помнить - рожденный в СССР)), а оказывается у поколения некс, лотерея - это однозначно лотто..
зы печалька..
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032186
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиM234,
Я то грешным делом подумал что лотерея это образное понятие, 6 цифр это ID билета,( были всякие лотереи Досаф, госзаймы( мсу должен помнить - рожденный в СССР)), а оказывается у поколения некс, лотерея - это однозначно лотто..
зы печалька..

Я вообще смысл затеи не понимаю. Все это "лотто" просчитываются на такие вот "хаки" математически.
То есть выиграть ты выиграешь, но выигрыш будет меньше или равен вложенному, ну разве что тебе повезёт и заполнив грубо говоря четверь возможных комбинаций ты возьмёшь "потного джека" ;)
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032194
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234,
я и назвал все это печалькой, то что вы сказали, это туда входит.
( песенка котэ Базилио) а еще плюс не играть в эти игры,( посмотреть кто хозяин этой игры)
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032425
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, какая разница, зачем и почему, надо быстро сгенерить 500 000 комбинаций из 6 чисел каждая, причем чтобы соблюдалась уникальность вне зависимости от порядка чисел внутри одной комбинации.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032502
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
izoldov-roskiniКомбинация номеров должна быть уникальна, причем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11
Значит, комбинация не уникальна
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032518
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Количество вариантов из 6 цифр - 1 000 000. Что уже выше заявленных 500 000.
Количество их перестановок - 6! = 720

Таким образом, количество возможных вариантов равно 1 000 000 * 720. Я полагаю, что после исключения повторов все равно не будет меньше миллиона.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032609
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Количество вариантов из 6 цифр - 1 000 000. Что уже выше заявленных 500 000.
Количество их перестановок - 6! = 720???????
Я тоже хочу так считать...
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032632
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
izoldov-roskiniпричем: 1 5 6 9 8 11 25 это равно 5 25 1 6 9 8 11, т.е. порядок не имеет значения. Если ехать простым for или через linq по массивам, получается очень долго, т.к. каждый раз надо проверять, есть ли совпадения в комбинациях или нет и если есть, комбинацию надо перегенерировать.
Для каждой комбинации сразу делать отсортированный "Хеш"
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032636
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AbstractionCat2Количество вариантов из 6 цифр - 1 000 000. Что уже выше заявленных 500 000.
Количество их перестановок - 6! = 720???????
Я тоже хочу так считать...
Надо было математику в ВУЗе учить

Правда, я неправильно посчитал.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032657
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь кто скажет, как быстро посчитать хеш набора чисел или строки?
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032669
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так. Обещанное решение за линейное время.

1. Формулировка задачи.
Поскольку исходная задача особой ясностью не отличилась, я буду иметь наглость додумать детали удобным мне образом. Итак, пусть требуется создать 500 000 (N) разных нумерованных лотерейных билетов. Каждый билет - это шесть (k) неповторяющихся чисел от 1 до 90 (m). Билеты, отличающиеся только порядком чисел, разными не считаются. Требуется, чтобы нельзя было угадать числа на билете, зная его номер и vice versa. Требуется, чтобы для любого билета любые две возможные комбинации номеров встречались с примерно равной вероятностью; желательно, чтобы это не менялось в результате знакомства с любыми иными билетами.

2. Анализ билетов. Сжатие содержания билета до одного числа.
Сколько всего может быть разных билетов? Очевидно, столько, сколько существует способов неупорядоченным образом выбрать k чисел из m без возвращения (т.е. каждое число выбирается не более одного раза):

Таким образом, 500 000 билетов мы наберём без проблем. Теперь вопрос: какова вероятность, что конкретное число (скажем, m) окажется на конкретном билете P(m)? Это отношение числа билетов, на которых оно есть, к числу всех билетов. Но если про билет известно только, что он содержит m, таких билетов столько, сколько было бы билетов с k-1 числом от 1 до m-1; а если билет не содержит m - это то же самое, как если бы мы с самого начала выбирали только числа от 1 до m-1:

Что подводит нас к методу "сжатия" билета до одного числа. Пусть у нас есть одно случайное натуральное число, равномерно распределённое от 1 до C m k . Если оно не больше C m-1 k-1 , добавим к билету m и для последующих расчётов уменьшим k на 1; иначе же уменьшим само число на количество "несбывшихся" вариантов C m-1 k-1 и получим число, равномерно распределённое уже от 1 до C m-1 k . Код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
    static class Combination {
        private static uint[,] m_C;
        
        static Combination() {
            m_C = new uint[Program.MaxValue+1, Program.NumValues+1];
            m_C[0, 0] = 1;
            for (int i = 1; i <= Program.NumValues; ++i) m_C[0, i] = 0;
            for (int n = 1; n <= Program.MaxValue; ++n) {
                m_C[n, 0] = 1;
                for (int k = 1; k <= Program.NumValues; ++k) {
                    m_C[n, k] = m_C[n - 1, k - 1] + m_C[n - 1, k];
                }
            }
        }

        public static List<int> GetList(uint seed) {
            List<int> ret = new List<int>();
            for(int remained = Program.NumValues, current = Program.MaxValue; remained>0; --current) {
                if (seed < m_C[current - 1, remained - 1]) {
                    ret.Add(current);
                    --remained;
                } else {
                    seed -= m_C[current - 1, remained - 1];
                }
            }

            return ret;
        }

        public static uint C(int n, int k) { return m_C[n, k]; }
    }


3. Обеспечение уникальности и случайности.
Очевидно, различным числам GetList сопоставит различные билеты, но работу мы себе не слишком упростили: теперь надо быть уверенным, что числа будут уникальными. Проще всего, конечно, использовать в качестве числа номер билета, но тогда мы не удовлетворим условиям из пункта 1. Можно начать со случайного 32-разрядного числа seed, в цикле прибавлять к нему некоторое другое случайное нечётное число и генерировать билет, только если seed меньше C m k . Несложно доказать, что при этом seed повторит своё значение только через 2 32 итераций, сгенерировав в процессе все возможные билеты. Также, любой один конкретный билет при этом будет совершенно случайным... но уже три билета подряд по-прежнему будут находится в чёткой зависимости.
Симметричный шифр переводит открытый текст (набор байт) в шифртекст такого же размера, причём это преобразование обратимо. То есть, если мы будем шифровать seed некоторым симметричным шифром (со случайным ключом), разным значениям seed всегда будут соответствовать разные результаты шифрования - и, по цепочке, разные билеты. Достаточно хороший шифр также гарантирует практический "разрыв" видимой зависимости между выходным значением и любыми косвенными данными о входном значении. Вот пример шифра, "достаточно хорошего" для этого примера (но не для реальной лотереи!):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
    class Encryptor {
        private UInt64 m_key;

        private const int NumRounds = 32;

        public Encryptor(UInt64 key) {
            m_key = key;
        }

        private UInt16 KeyPart(int i) {
            return (UInt16)((m_key >> ((17*i)%48)) & 0xFFFF);
        }

        private static UInt16[] permutation1 = { 2, 12, 7, 5, 11, 1, 10, 15, 0, 13, 14, 9, 4, 6, 3, 8 };
        private static UInt16[] permutation2 = { 9, 3, 0, 4, 12, 13, 15, 11, 6, 5, 7, 14, 8, 10, 2, 1 };

        private UInt16 EncryptionBlock(UInt16 left, UInt16 keyPart) {
            UInt16 l = (UInt16)(((left & 0xFF00) + 0x7500) + (keyPart & 0xFF00));
            UInt16 r = (UInt16)(((permutation1[(left&0x01E0)>>5]) ^ left) & 0xFF);
            l ^= (UInt16)((r<<8)^permutation2[(l&0x3C00)>>10]);
            r += (UInt16)(keyPart & 0xFF);
            return (UInt16)((l>>8) ^ (r<<8));
        }

        public UInt32 Encrypt(UInt32 message) {
            UInt16 left, right;
            left = (UInt16)((message & 0xFFFF0000) >> 16);
            right = (UInt16)(message & 0xFFFF);
            left ^= KeyPart(0);
            right ^= KeyPart(1);
            for (int i = 2; i < (NumRounds+2); ++i) {
                right ^= EncryptionBlock(left, KeyPart(i));
                right ^= left; left ^= right; right ^= left;
            }
            right ^= left; left ^= right; right ^= left;
            left ^= KeyPart(NumRounds+2);
            right ^= KeyPart(NumRounds+3);
            return ((UInt32)(left) << 16) ^ right;
        }
    }

4. Складывая всё вместе.
Окончательно, пишем саму программу. Чисто косметическая добавка: поскольку список чисел билета у нас строится от больших к меньшим, его можно бы развернуть перед выводом на печать. Код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    class Program {
        public const int NumValues = 6;

        public const int MaxValue = 90;

        private const int NumOfTickets = 500000;

        static void Main(string[] args) {
            int number=1;
            Random r = new Random();
            Encryptor e = new Encryptor(((ulong)(r.Next())<<32)^((ulong)(r.Next())));
            uint seedLimit = Combination.C(MaxValue, NumValues);
            for (uint seed = (uint)r.Next(), step = (uint)(r.Next()|1); number <= NumOfTickets; seed += step) {
                uint rSeed = e.Encrypt(seed);
                if (rSeed >= seedLimit) continue;
                List<int> values = Combination.GetList(rSeed);
                values.Reverse();
                Console.WriteLine(number.ToString("D6") + " - ( " 
                    + values.Aggregate(string.Empty, (s, i) => s += i.ToString() + " " ) + ")");
                ++number;
            }
        }
    }
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032710
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskiniИсходя из этого вопрос, есть ли какой-то более быстрый способ проверки наличия набора значений в массиве данных? Используйте множества (HashSet/SortedSet):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public static void Main (string[] args)
{
	HashSet<String> db = new HashSet<String>();
	SortedSet<int> nums = new SortedSet<int>();
	Random rnd = new Random();
	for (int i = 0; db.Count < 500000; i++)
	{
		for (int j = 0; nums.Count < 6; j++)
		{
			nums.Add(rnd.Next (1, 100));
		}
		StringBuilder sb = new StringBuilder();
		foreach (int num in nums)
		{
			sb.AppendFormat("{0:D2} ", num);
		}
		db.Add(sb.ToString());
		nums.Clear();
	}
	foreach (String s in db)
	{
		Console.WriteLine (s); // вывод долгий и лучше перенаправить в файл
	}
}
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032740
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbstractionТак. Обещанное решение за линейное время.

1. Формулировка задачи.
Поскольку исходная задача особой ясностью не отличилась, я буду иметь наглость додумать детали удобным мне образом. Итак, пусть требуется создать 500 000 (N) разных нумерованных лотерейных билетов. Каждый билет - это шесть (k) неповторяющихся чисел от 1 до 90 (m). Билеты, отличающиеся только порядком чисел, разными не считаются. Требуется, чтобы нельзя было угадать числа на билете, зная его номер и vice versa. Требуется, чтобы для любого билета любые две возможные комбинации номеров встречались с примерно равной вероятностью; желательно, чтобы это не менялось в результате знакомства с любыми иными билетами.

2. Анализ билетов. Сжатие содержания билета до одного числа.
Сколько всего может быть разных билетов? Очевидно, столько, сколько существует способов неупорядоченным образом выбрать k чисел из m без возвращения (т.е. каждое число выбирается не более одного раза):

Таким образом, 500 000 билетов мы наберём без проблем. Теперь вопрос: какова вероятность, что конкретное число (скажем, m) окажется на конкретном билете P(m)? Это отношение числа билетов, на которых оно есть, к числу всех билетов. Но если про билет известно только, что он содержит m, таких билетов столько, сколько было бы билетов с k-1 числом от 1 до m-1; а если билет не содержит m - это то же самое, как если бы мы с самого начала выбирали только числа от 1 до m-1:

Что подводит нас к методу "сжатия" билета до одного числа. Пусть у нас есть одно случайное натуральное число, равномерно распределённое от 1 до C m k . Если оно не больше C m-1 k-1 , добавим к билету m и для последующих расчётов уменьшим k на 1; иначе же уменьшим само число на количество "несбывшихся" вариантов C m-1 k-1 и получим число, равномерно распределённое уже от 1 до C m-1 k . Код:+
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
    static class Combination {
        private static uint[,] m_C;
        
        static Combination() {
            m_C = new uint[Program.MaxValue+1, Program.NumValues+1];
            m_C[0, 0] = 1;
            for (int i = 1; i <= Program.NumValues; ++i) m_C[0, i] = 0;
            for (int n = 1; n <= Program.MaxValue; ++n) {
                m_C[n, 0] = 1;
                for (int k = 1; k <= Program.NumValues; ++k) {
                    m_C[n, k] = m_C[n - 1, k - 1] + m_C[n - 1, k];
                }
            }
        }

        public static List<int> GetList(uint seed) {
            List<int> ret = new List<int>();
            for(int remained = Program.NumValues, current = Program.MaxValue; remained>0; --current) {
                if (seed < m_C[current - 1, remained - 1]) {
                    ret.Add(current);
                    --remained;
                } else {
                    seed -= m_C[current - 1, remained - 1];
                }
            }

            return ret;
        }

        public static uint C(int n, int k) { return m_C[n, k]; }
    }


3. Обеспечение уникальности и случайности.
Очевидно, различным числам GetList сопоставит различные билеты, но работу мы себе не слишком упростили: теперь надо быть уверенным, что числа будут уникальными. Проще всего, конечно, использовать в качестве числа номер билета, но тогда мы не удовлетворим условиям из пункта 1. Можно начать со случайного 32-разрядного числа seed, в цикле прибавлять к нему некоторое другое случайное нечётное число и генерировать билет, только если seed меньше C m k . Несложно доказать, что при этом seed повторит своё значение только через 2 32 итераций, сгенерировав в процессе все возможные билеты. Также, любой один конкретный билет при этом будет совершенно случайным... но уже три билета подряд по-прежнему будут находится в чёткой зависимости.
Симметричный шифр переводит открытый текст (набор байт) в шифртекст такого же размера, причём это преобразование обратимо. То есть, если мы будем шифровать seed некоторым симметричным шифром (со случайным ключом), разным значениям seed всегда будут соответствовать разные результаты шифрования - и, по цепочке, разные билеты. Достаточно хороший шифр также гарантирует практический "разрыв" видимой зависимости между выходным значением и любыми косвенными данными о входном значении. Вот пример шифра, "достаточно хорошего" для этого примера (но не для реальной лотереи!):+
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
    class Encryptor {
        private UInt64 m_key;

        private const int NumRounds = 32;

        public Encryptor(UInt64 key) {
            m_key = key;
        }

        private UInt16 KeyPart(int i) {
            return (UInt16)((m_key >> ((17*i)%48)) & 0xFFFF);
        }

        private static UInt16[] permutation1 = { 2, 12, 7, 5, 11, 1, 10, 15, 0, 13, 14, 9, 4, 6, 3, 8 };
        private static UInt16[] permutation2 = { 9, 3, 0, 4, 12, 13, 15, 11, 6, 5, 7, 14, 8, 10, 2, 1 };

        private UInt16 EncryptionBlock(UInt16 left, UInt16 keyPart) {
            UInt16 l = (UInt16)(((left & 0xFF00) + 0x7500) + (keyPart & 0xFF00));
            UInt16 r = (UInt16)(((permutation1[(left&0x01E0)>>5]) ^ left) & 0xFF);
            l ^= (UInt16)((r<<8)^permutation2[(l&0x3C00)>>10]);
            r += (UInt16)(keyPart & 0xFF);
            return (UInt16)((l>>8) ^ (r<<8));
        }

        public UInt32 Encrypt(UInt32 message) {
            UInt16 left, right;
            left = (UInt16)((message & 0xFFFF0000) >> 16);
            right = (UInt16)(message & 0xFFFF);
            left ^= KeyPart(0);
            right ^= KeyPart(1);
            for (int i = 2; i < (NumRounds+2); ++i) {
                right ^= EncryptionBlock(left, KeyPart(i));
                right ^= left; left ^= right; right ^= left;
            }
            right ^= left; left ^= right; right ^= left;
            left ^= KeyPart(NumRounds+2);
            right ^= KeyPart(NumRounds+3);
            return ((UInt32)(left) << 16) ^ right;
        }
    }

4. Складывая всё вместе.
Окончательно, пишем саму программу. Чисто косметическая добавка: поскольку список чисел билета у нас строится от больших к меньшим, его можно бы развернуть перед выводом на печать. Код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    class Program {
        public const int NumValues = 6;

        public const int MaxValue = 90;

        private const int NumOfTickets = 500000;

        static void Main(string[] args) {
            int number=1;
            Random r = new Random();
            Encryptor e = new Encryptor(((ulong)(r.Next())<<32)^((ulong)(r.Next())));
            uint seedLimit = Combination.C(MaxValue, NumValues);
            for (uint seed = (uint)r.Next(), step = (uint)(r.Next()|1); number <= NumOfTickets; seed += step) {
                uint rSeed = e.Encrypt(seed);
                if (rSeed >= seedLimit) continue;
                List<int> values = Combination.GetList(rSeed);
                values.Reverse();
                Console.WriteLine(number.ToString("D6") + " - ( " 
                    + values.Aggregate(string.Empty, (s, i) => s += i.ToString() + " " ) + ")");
                ++number;
            }
        }
    }



Спасибо за исчерпывающий ответ, НО, у вас написано
Код: sql
1.
Билеты, отличающиеся только порядком чисел, разными не считаются. 


А у меня ситуация наоборот, ОНИ БУДУТ считаться РАВНЫМИ
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032753
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskini
Спасибо за исчерпывающий ответ, НО, у вас написано
Код: sql
1.
Билеты, отличающиеся только порядком чисел, разными не считаются. 


А у меня ситуация наоборот, ОНИ БУДУТ считаться РАВНЫМИ
Разными не считаются = считаются равными, вам нельзя в программисты

Уникальность 500 тыс билетов из 6 чисел получается простым последовательным перебором от 1 до 500000, могу предположить, что каждое число может быть двузначным или даже трехзначным, так как об это не сказано в первом сообщении, то в постановщики задач вам тоже нельзя
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032776
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор топика жжёт )))

10 минут и код готов. минус его только метод Рандом. а так шустро работает. меньше секунды
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
 class loto
    {
        public int MAX = 49;
        public int NN = 6;
        public int NUMBERS = 500000;
        Random RAN = new Random();
        public Dictionary<long, int[]> RESULT = new Dictionary<long, int[]>();
        public int MISMATCH = 0;
        public void Generate_Super_puper_Random_Numbers_from_1_to_Max()
        {
            int _MAX=MAX;
            MISMATCH = 0;
            for (int Q = 0; Q < NUMBERS; Q++)
            {
            RESTART0:
                //ПОЛУЧИМ 6 ЧИСЕЛ
                List<int> ARR = new List<int>();
                for (int N = 0; N < NN; N++)
                {
                RESTART:
                    int T = RAN.Next(1, _MAX);
                    if (ARR.Contains(T)) 
                        //НУ ЕСЛИ ОНО УЖЕ ЕСТЬ В НАБОРЕ , ТО ПОВТОРИМ
                        goto RESTART;
                    ARR.Add(T);
                }
                //ОТСОРТИРУЕМ ПОЛУЧЕННЫЙ МАССИВ  2,6,14,34,37,41
                ARR.Sort();
                //ПОЛУЧИМ "СВЁРТКУ" ЧИСЕЛ
                long Z = MUX(ARR.ToArray());
                if (RESULT.ContainsKey(Z))
                //ЕСЛИ СИЕ ЧИСЛО УЖЕ В КОЛЛЕКЦИИ , ТО ПОВТОРИМ СНАЧАЛА
                {
                    MISMATCH++; //ПОСЧИТАЕМ ДЛЯ СЕБЯ ЧИСЛО ПРОМАХОВ
                    goto RESTART0;
                }
                RESULT.Add(Z, ARR.ToArray());
            }
            //ПРОФФИТ!!!
        }
        long MUX(int[] ARR)
        {    //ТИПА ТАК БЫСТРЕЕ
             long N= ARR[0]+
                     ARR[1] * 100+
                     ARR[2] * 10000+
                     ARR[3] * 1000000+
                     ARR[4] * 100000000+
                     ARR[5] * 10000000000;
             return N;
        }
    }



ЗЫ. число повторений (MISMATCH) на 500.000 около 10.000 штук
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032777
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
типа с утречка , взамен зарядки.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032832
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erтипа с утречка , взамен зарядки.
За "goto" нужно отстреливать из винтореза на месте.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38032847
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЗа "goto" нужно отстреливать из винтореза на месте.
МСУ, ты это детям рассказывай, что goto это есть плёхо.
а мне лично влом писать лишние строчки с while , break ...etc
утяжеляют код и ограничивают в возможностях.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033017
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erМСУ, ты это детям рассказывай, что goto это есть плёхо
Вот тебе и рассказываю же.

beg-in-erа мне лично влом писать лишние строчки с while , break ...etc
утяжеляют код и ограничивают в возможностях.
Хрень эту в яслях коллегам расскажи, недоросль. Goto - признак идиотизма.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033023
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er, таким как ты посвещается:
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033051
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ Goto - признак идиотизма.авторпрограммисты делятся на три группы:
-кто знает, что такое goto и используют его по назначению
-кто не знают этого оператора, но хотят узнать
-кто вообще отрицают его существование...простим МСУ его заносчивость и жырное тролление.

goto всего лишь инструмент. и как любой инструмент, в нормальных руках он будет работать как надо.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033060
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-ergoto всего лишь инструмент. и как любой инструмент, в нормальных руках он будет работать как надо.
goto - пережитки прошлого, этим лохмотьям не место в языках высокого уровня.
P.S. Почитай, что такое структурное программирование (последовательное исполнение, ветвление и цикл). Операторам безусловного перехода место только в воспаленном сознании кодирующих обезьянок, не более того.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033161
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУbeg-in-ergoto всего лишь инструмент. и как любой инструмент, в нормальных руках он будет работать как надо.
goto - пережитки прошлого, этим лохмотьям не место в языках высокого уровня.
P.S. Почитай, что такое структурное программирование (последовательное исполнение, ветвление и цикл). Операторам безусловного перехода место только в воспаленном сознании кодирующих обезьянок, не более того.
Ну, со своими "сугуботеоретическими" познаниями МСУ бы нас еще объектно-ориентированному программированию начал учить...
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033416
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvНу, со своими "сугуботеоретическими" познаниями МСУ бы нас еще объектно-ориентированному программированию начал учить...
Тебя учи не учи - как был бестолочью, так им и остался :)
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033430
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУsphinx_mvНу, со своими "сугуботеоретическими" познаниями МСУ бы нас еще объектно-ориентированному программированию начал учить...
Тебя учи не учи - как был бестолочью, так им и остался :)Ага-ага...
Ваши познания Вы вполне продемонстрировали.
Или думаете, если Ваш бред почистили, он от этого перестал быть бредом?
Так что сядьте в сторонке и тихонечко покурите.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033563
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,

По поводу алгоритма, у вас формируется 500 000 билетов, но в каждом билете у меня таких комбинаций 12, т.е. это все надо сделать 12 раз. За секунды тут ничего не делается, это бред, такой набор чисел формируется гораздо дольше. Получается в итоге 12 массивов по 500 000 в каждом, уникальность только в пределах 1-го массива, чем ближе к 500 000 тем скорость по понятным причинам падает. Плюс мне надо еже и в базу затолкать это все, поэтому не все так быстро. Алгоритм похожий Вашему я сделал еще раньше, только без использования goto , но у вас тоже есть пару идей, за них спасибо, сейчас попробую

Так что в общем, благодарю
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033571
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskini,

Товарищь, вы просто не умеете читать и думать. предложенный алгоритм делает то что надо , 6 лямов уникальных билетов за 10 секунд.

izoldov-roskini мож вам сменить профессию?
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033738
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvАга-ага...
Ваши познания Вы вполне продемонстрировали.
Или думаете, если Ваш бред почистили, он от этого перестал быть бредом?
Так что сядьте в сторонке и тихонечко покурите.
Бред обычно хостился у тебя в мозжечке, даже сидя на короточках в сторонке его так просто не выкуришь.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033896
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУsphinx_mvАга-ага...
Ваши познания Вы вполне продемонстрировали.
Или думаете, если Ваш бред почистили, он от этого перестал быть бредом?
Так что сядьте в сторонке и тихонечко покурите.
Бред обычно хостился у тебя в мозжечке, даже сидя на короточках в сторонке его так просто не выкуришь.
Ссылки на документацию на конкретные программных средств и продуктов - у Вас называется бредом?
И Вы уже разобрались, что такое инкапсуляция, наследование и полиморфизм?

Может это не в Вашем воспаленном воображении родилось гениальное "использование объектно-ориентированных методик в программировании не является объектно-ориентированным программированием"?

В-общем, до того, чтобы хотя бы пытаться корчить из себя "крупного специалиста" Вам еще лечи учиться и учиться...
И долго-долго набираться практического опыта...
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033915
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvСсылки на документацию на конкретные программных средств и продуктов - у Вас называется бредом?

Сынок, о каких ссылках ты вещаешь? Ты двух слов в теме не мог связать, о чем ты.

sphinx_mv И Вы уже разобрались, что такое инкапсуляция, наследование и полиморфизм?
Я-то разобрался, а вот ты так и не осилил сие фундаментальные принципы построения бизнес логики в приложениях. Шагом марш в сад, учить.

sphinx_mvМожет это не в Вашем воспаленном воображении родилось гениальное "использование объектно-ориентированных методик в программировании не является объектно-ориентированным программированием"?
Ты сам-то понял что ляпнул, двоешник?

sphinx_mv В-общем, до того, чтобы хотя бы пытаться корчить из себя "крупного специалиста" Вам еще лечи учиться и учиться...
И долго-долго наб quot ираться практического опыта...
И это мне пишет ламер, который по документации оракла осилил пакеты с хранимыми процедурами? Не смешно.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033922
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erizoldov-roskini,

Товарищь, вы просто не умеете читать и думать. предложенный алгоритм делает то что надо , 6 лямов уникальных билетов за 10 секунд.

izoldov-roskini мож вам сменить профессию?

А может Вам перестать трындеть и просто говорить по существу и слушать?
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38033930
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-бы еще сказал как посчитать максимально кол-во комбинаций наборов из 6 чисел от 1 до 30, порядок числа в наборе не имеет значения, т.е. 1 5 26 3 16 4 равно 5 3 16 26 4 1.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034002
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУsphinx_mvСсылки на документацию на конкретные программных средств и продуктов - у Вас называется бредом?

Сынок, о каких ссылках ты вещаешь?
А вот тех самых, по поводу которых Вы совершенно бестолковым образом размазывали сопли...
МСУТы двух слов в теме не мог связать, о чем ты.
Это не потому, что я не смог их связать... Это потому что Вы не способны их воспринять - для этого необходимо иметь определенный багаж базовых знаний, чем Вы, к сожалению, не очень владеете... Знать название термин мало - нужно еще и понимать, что он означает и как и когда применяется. И с этим у Вас весьма слабовато.

И еще раз напоминаю: если Ваш бред был затерт - от этого он не перестал быть Вашим бредом.
МСУsphinx_mv И Вы уже разобрались, что такое инкапсуляция, наследование и полиморфизм?
Я-то разобрался, а вот ты так и не осилил сие фундаментальные принципы построения бизнес логики в приложениях. Шагом марш в сад, учить.
Вы бы с основами программирования для начала разобрались, прежде чем вещать о проектировании архитектур приложений.
И, кстати, я вполне могу позволить себе, взяв дрын покрепче - и даже не "шагом", а "бегом" - погнать Вас перед собой в сад учить матчасть...
МСУsphinx_mvМожет это не в Вашем воспаленном воображении родилось гениальное "использование объектно-ориентированных методик в программировании не является объектно-ориентированным программированием"?
Ты сам-то понял что ляпнул, двоешник?
Расслабьтесь и получите удовольствие: это была дословная цитата того, что некогда ляпнул МСУ. Может знаете такого?
Нет? Ну, ничего... Кто-нибудь другой точно знает... И даже соответствующий "спич" наверняка вспомнит...
МСУsphinx_mv В-общем, до того, чтобы хотя бы пытаться корчить из себя "крупного специалиста" Вам еще лечи учиться и учиться...
И долго-долго набираться практического опыта...
И это мне пишет ламер, который по документации оракла осилил пакеты с хранимыми процедурами? Не смешно.Я затрудняюсь оценить степень ламеризма "профессиАнала", который объектный тип данных в Оракле (после всех приведенных ссылок на документацию и примеров конкретных реализаций) все еще воспринимает всего лишь как пакеты с хранимыми процедурами, а собственный програмазм в "лапше с соплями" считает верхом совершенства... Вот такая вот суровая действительность, которой до просто "не смешно" очень неблизко....
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034028
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskiniКто-бы еще сказал как посчитать максимально кол-во комбинаций наборов из 6 чисел от 1 до 30, порядок числа в наборе не имеет значения, т.е. 1 5 26 3 16 4 равно 5 3 16 26 4 1.

Abstraction привел вам формулу на 2м листе, поменяйте в ней м и к на нужные вам.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034043
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goto нужен только если нет механизма исключений.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034137
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кgoto нужен только если нет механизма исключений.Правильный ответ: goto нужен тогда, когда он нужен. :)
И к наличию/отсутствию механизма исключений его использование никакого отношения не имеет.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034169
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvАлексей Кgoto нужен только если нет механизма исключений.Правильный ответ: goto нужен тогда, когда он нужен. :)Когда он ещё нужен? Нужен показательный пример.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034210
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvА вот тех самых, по поводу которых Вы совершенно бестолковым образом размазывали сопли...

Твои сопли бесполезно размазывать, поэтому вернее сказать так: "учил балбеса объектно-ориентированным постулатам, размазывая его ошметки мозгов о кирпичную кладь".

Пойдет?

sphinx_mvЭто не потому, что я не смог их связать... Это потому что Вы не способны их воспринять - для этого необходимо иметь определенный багаж базовых знаний, чем Вы, к сожалению, не очень владеете... Знать название термин мало - нужно еще и понимать, что он означает и как и когда применяется. И с этим у Вас весьма слабовато.

И еще раз напоминаю: если Ваш бред был затерт -от этого он не перестал быть Вашим бредом.

Ту несносную порожень, которую изливало твое больное воображение, априори нельзя "воспринять". Называть PL/SQL объектно-ориентированным языком программирования может только полоумный. А те ошметки из документации оракла, которые ты тупо пытался искать по паттерну "oracle object oriented programming" можешь показать своим коллегам -детям из детского садика. Они вместе с тобой посмеются над, особенно над "одноуровневым наследованием".

sphinx_mvВы бы с основами программирования для начала разобрались, прежде чем вещать о проектировании архитектур приложений.

И, кстати, я вполне могу позволить себе, взяв дрын покрепче - и даже не "шагом", а "бегом" - погнать Вас перед собой в сад учить матчасть...

Погонялка еще не выросла, чтобы такие пуки из кустов издавать. Если твое убогое сознание видит в программировании только goto и хранимые процедуры, могу посоветовать тебе убить себя об стену. Большей пользы твое скудное сознание не может привнести в этот форум.

sphinx_mvРасслабьтесь и получите удовольствие: это была дословная цитата того, что некогда ляпнул МСУ. Может знаете такого?

Нет? Ну, ничего... Кто-нибудь другой точно знает... И даже соответствующий "спич" наверняка вспомнит...

Ты сам с собой разговариваешь, задавая и отвечая на свои же тупые вопросы? В клинику сходи, там помогут.

sphinx_mvЯ затрудняюсь оценить степень ламеризма "профессиАнала", который объектный тип данных в Оракле (после всех приведенных ссылок на документацию и примеров конкретных реализаций) все еще воспринимает всего лишь как пакеты с хранимыми процедурами, а собственный програмазм в "лапше с соплями" считает верхом совершенства... Вот такая вот суровая действительность, которой до просто "не смешно" очень неблизко....

Твои оценки слишком посредственны, от них веет тупым быдломышлением ораклоида-неудачника. С объектным типом данных в Оракле ты можешь сходить повеситься, а не орать во всю гортань, что это - ООП. Повесели своих коллег в саду, уже ведь советовал.

sphinx_mvПравильный ответ: goto нужен тогда, когда он нужен

Правильный ответ: только безумные кретины в языках высокого уровня используют goto. В этих языках данный оператор в принципе не нужен. Хотя, твое тупое мышление кодирующей PL-обезьянки еще не доросло до этих позывов здравой логики.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034238
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей ККогда он ещё нужен? Нужен показательный пример.
сходу
1. выход из глубокого цыкла
Код: c#
1.
2.
3.
4.
5.
6.
7.
for ()
    {
    for()
       {
           if (true) goto metka1;
       }
     }metka1:



2. Замена сложной рекурсии

по моему глубокому, и уже непоколебимому убеждению, все , кто говорит что goto это признак плохого, просто до конца не понимают что такое синтетический язык программирования. потому как необходимость применения/неприменения этого злощастного оператора goto прямо следует из понимания того , что есть язык программирования.
но думаю это особая тема, и в рамках этой темы развивать это направление не буду, т.к. это явный офтопэ.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034246
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskiniКто-бы еще сказал как посчитать максимально кол-во комбинаций наборов из 6 чисел от 1 до 30, порядок числа в наборе не имеет значения, т.е. 1 5 26 3 16 4 равно 5 3 16 26 4 1.Ответ для самопроверки: 593775. Способ его получения ищется или в моём посте выше, или в Вики, или в Гугле, или в любой книге по теории вероятностей. Заодно обратите внимание, что вы упустили фразу "без повторов", т.к. 1 1 1 2 2 3 - тоже набор из 6 чисел от 1 до 30; количество наборов из N по k с повторами -
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034262
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erАлексей ККогда он ещё нужен? Нужен показательный пример.
сходу
1. выход из глубокого цыкла
Код: c#
1.
2.
3.
4.
5.
6.
7.
for ()
    {
    for()
       {
           if (true) goto metka1;
       }
     }metka1:

Нормально разбить по методам + return ?
Код: c#
1.
2.
3.
4.
5.
6.
7.
for ()
    {
    for()
       {
           if (true) return;
       }
     }



beg-in-er2. Замена сложной рекурсииНужен пример.
beg-in-erпо моему глубокому, и уже непоколебимому убеждению, все , кто говорит что goto это признак плохого, просто до конца не понимают что такое синтетический язык программирования. потому как необходимость применения/неприменения этого злощастного оператора goto прямо следует из понимания того , что есть язык программирования.
но думаю это особая тема, и в рамках этой темы развивать это направление не буду, т.к. это явный офтопэ.Мне кажется нужно провести соответствующий рефакторинг и никакой goto не потребуется.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034275
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНормально разбить по методам + return ?

)))
1. налетаем каждый раз на то , что надо метод создавать. допстроки + много веселья. метод может быть живым.
2. можем прыгнуть не обязательно в конец цыклов. а подальше
3. скажем , если требуется быстродействие , то стоимость вызова метода уже имеет значение см: тута


beg-in-er2. Замена сложной рекурсииНужен пример.
ну сами подумайте, как можно просто заменить сложную рекурсию, с большим количеством ветвлений внутри, на однократно вызываемый метод.

я не фанат goto, я его применяю только там где его применение обходится дешевле других конструкций управления.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034292
фиганыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

поскольку оператор goto не изжит из C# - соответственно им кто-то пользуется, и его использование не помечено ни obsolet ни другой чёрной меткой.
Ваши личные предпочтения в употреблении goto таки продолжают оставаться вашими как и предпочтения beg-in-er.
Все при своих зачем дальше засорять форум?
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034317
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фиганычМСУ,

поскольку оператор goto не изжит из C# - соответственно им кто-то пользуется, и его использование не помечено ни obsolet ни другой чёрной меткой.
Ваши личные предпочтения в употреблении goto таки продолжают оставаться вашими как и предпочтения beg-in-er.
Все при своих зачем дальше засорять форум?
Он и не может быть изжит, т.к. есть понятие функциональности языка, а так же обратной совместимости. Речь даже не о моих предпочтениях, а о критике со стороны общества. При всех отрицательных сторонах этого оператора.
По поводу офтопа - любая ветка, впринципе так или иначе офтопична, т.к. в дискуссии участвуют люди, а не роботы. Так что расслабься.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034365
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erАлексей КНормально разбить по методам + return ?

)))
1. налетаем каждый раз на то , что надо метод создавать. допстроки + много веселья. метод может быть живым.
2. можем прыгнуть не обязательно в конец цыклов. а подальшеЛучше не полениться, и произвести выделение метода(ов). Тут даже старина Фаулер со мной согласен. :-)
beg-in-er3. скажем , если требуется быстродействие , то стоимость вызова метода уже имеет значение см: тутаВроде как при компиляции производится инлайнинг методов.
beg-in-erbeg-in-er2. Замена сложной рекурсииНужен пример.
ну сами подумайте, как можно просто заменить сложную рекурсию, с большим количеством ветвлений внутри, на однократно вызываемый метод.Как раз в рекурсии использовать return самое оно. В качестве примера см. парсеры дерева выражений LINQ через ExpressionVisitor. А там рекурсию я бы не назвал простой.
beg-in-erя не фанатЭто хорошо. :-)
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034395
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фиганычВаши личные предпочтения в употреблении goto таки продолжают оставаться вашими...
Нарушение фундаментальных основ. Не?

Тут
авторНаиболее сильной критике со стороны разработчиков структурного подхода к программированию подвергся оператор GOTO (оператор безусловного перехода), имевшийся тогда почти во всех языках программирования. Неправильное и необдуманное использование произвольных переходов в тексте программы приводит к получению запутанных, плохо структурированных программ (т. н. спагетти-кода), по тексту которых практически невозможно понять порядок исполнения и взаимозависимость фрагментов.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034401
Syrex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskiniКто-бы еще сказал как посчитать максимально кол-во комбинаций наборов из 6 чисел от 1 до 30, порядок числа в наборе не имеет значения, т.е. 1 5 26 3 16 4 равно 5 3 16 26 4 1.

Может проще сгенерить все возможные варианты, а после этого случайным образом "выдергивать" их?

PS - по крайней мере так генерировали в Русском Лото.
Генерилось у них минут 10-15
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034436
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВроде как при компиляции производится инлайнинг методов.
не знаю что там именно происходит, но я вижу что происходит замедление исполнения команд.
Как раз в рекурсии использовать return самое оно. цель как раз отказаться от рекурсии по причине ускорения ( до 10 раз , а то и более)
....................
Алексей К Неправильное и необдуманное использование goto....
так это чьи проблемы , оператора goto , или хомосапиенса его использующего???
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034450
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Syrexizoldov-roskiniКто-бы еще сказал как посчитать максимально кол-во комбинаций наборов из 6 чисел от 1 до 30, порядок числа в наборе не имеет значения, т.е. 1 5 26 3 16 4 равно 5 3 16 26 4 1.

Может проще сгенерить все возможные варианты, а после этого случайным образом "выдергивать" их?

PS - по крайней мере так генерировали в Русском Лото.
Генерилось у них минут 10-15А смысл? Выше приведён алгоритм, который получает комбинацию по числу, где число - от 0 до (количество вариантов-1). То есть, "все возможные варианты" - просто множество чисел. Вопрос в том, как нормально "выдернуть" без повторов, с равномерным распределением.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034501
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erАлексей КВроде как при компиляции производится инлайнинг методов.
не знаю что там именно происходит, но я вижу что происходит замедление исполнения команд.Не замечал.
beg-in-erКак раз в рекурсии использовать return самое оно. цель как раз отказаться от рекурсии по причине ускорения ( до 10 раз , а то и более)Опять же нужен пример. Верить наслово никому нельзя. :-)
beg-in-erАлексей К Неправильное и необдуманное использование goto....
так это чьи проблемы , оператора goto , или хомосапиенса его использующего???Вроде как все "обдуманные" стратегии использования goto завёрнуты в конструкции структурного программирования: if, while, throw, return и т. п.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034510
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erАлексей КВроде как при компиляции производится инлайнинг методов.
не знаю что там именно происходит, но я вижу что происходит замедление исполнения команд.
Элементарно...
При вызове процедуры/функции добавляется, самое меньшее, передача параметров и возврат результатов - и это не считая выделения памяти под локальные переменные и их инициализацию. Переход по метке всего этого не требует. Соответственно, и работает быстрее...
beg-in-erКак раз в рекурсии использовать return самое оно. цель как раз отказаться от рекурсии по причине ускорения ( до 10 раз , а то и более)
Конкретная цель -> конкретное решение -> конкретный результат...
И если решениеи использовать (или не использовать) какое-то средства положительно сказывается на этой цепочке - решение правильное... И пусть весь мир подождет...
beg-in-erАлексей К Неправильное и необдуманное использование goto....
так это чьи проблемы , оператора goto , или хомосапиенса его использующего???+100500 :)
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034552
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кbeg-in-erтак это чьи проблемы , оператора goto , или хомосапиенса его использующего???Вроде как все "обдуманные" стратегии использования goto завёрнуты в конструкции структурного программирования: if, while, throw, return и т. п.
Десяток-другой вложенных друг в друга "завернутых" if/else со сложными условиями в каждом операторе - вынос мозга гарантирован...
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034555
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erАлексей КВроде как при компиляции производится инлайнинг методов.
не знаю что там именно происходит, но я вижу что происходит замедление исполнения команд. Тут и тут .
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034576
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvАлексей Кпропущено...
Вроде как все "обдуманные" стратегии использования goto завёрнуты в конструкции структурного программирования: if, while, throw, return и т. п.
Десяток-другой вложенных друг в друга "завернутых" if/else со сложными условиями в каждом операторе - вынос мозга гарантирован...Ещё раз - не нужно пихать всё в один метод. Желание сделать goto - одна из причин для выделения метода(ов).
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034617
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кsphinx_mvпропущено...

Десяток-другой вложенных друг в друга "завернутых" if/else со сложными условиями в каждом операторе - вынос мозга гарантирован...Ещё раз - не нужно пихать всё в один метод. Желание сделать goto - одна из причин для выделения метода(ов).Ага...
А желание выделить класс - причина еще раз хорошо подумать...
"Иметь причину" что-либо сделать, совершенно не означает "иметь основание" делать именно это. :)

Исхожу из того, что в "homo sapiens" ключевой частью служит все же "разумный"...
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38034653
Syrex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbstractionSyrexпропущено...


Может проще сгенерить все возможные варианты, а после этого случайным образом "выдергивать" их?

PS - по крайней мере так генерировали в Русском Лото.
Генерилось у них минут 10-15А смысл? Выше приведён алгоритм, который получает комбинацию по числу, где число - от 0 до (количество вариантов-1). То есть, "все возможные варианты" - просто множество чисел. Вопрос в том, как нормально "выдернуть" без повторов, с равномерным распределением.
После генерации создать "массив_а" на 500 000 элементов (цифр от 0 до 499 999) и далее по этим номерам вытаскивать строки из массива "всех возможных вариантов", номера которых соответствуют числам из "массив_а"
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38035022
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskiniГоспода, какая разница, зачем и почему, надо быстро сгенерить 500 000 комбинаций из 6 чисел каждая, причем чтобы соблюдалась уникальность вне зависимости от порядка чисел внутри одной комбинации.

Как это какая разница?
Хотелось бы знать что бы прикинуть стоимость этой затеи.
Если ЭТО немецкое LOTTO 6 из 49, на что это очень похоже, то тогда 500 000 комбинаций это будет 41667 билетов по 12 полей в каждом и ценой в 9,25 Евро, ИТОГО = 385419,75 €
Ну а дальше не сложно посмотреть какие у вас шансы выиграть и сколько вы можете выиграть.
Хотите умереть молодым и красивым - найдите какого-нить бандита уважаемого человека который даст вам денег на эту затею.

Вот затем и хотелось бы знать. Давайте колитесь уже. А то может и правда надо уже бежать покупать 41667 билетов что бы разбогатеть, а мужики то не знают. ;)
Я жду.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38107692
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал генерацию комбинаций из 6 цифр от 1 до 30, расположение цифр в комбинации не имеет значения, т.е. 1 2 3 4 5 6 = 2 1 3 5 6 5, но почему-то при 475020 идет резкое падение скорости, падение практически до нуля, не могу понять в чем причина, комбинаций по комбинаторике должно получаться чуть больше 593 000, где косяк?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
                            for (int y = 1; y <= 590000; y++) //12
                            {
                                RESTART0:
                                 List<int> ARR = new List<int>();
                                 for (int N = 0; N < 6; N++)
                                 {
                                     int T = rnd.Next(1, 30);
                                     while (ARR.Contains(T) || T == 0)
                                     {
                                         T = rnd.Next(1, 30);
                                     }
                                     ARR.Add(T);
                                     
                                 }
                                ARR.Sort();
                                
                                if (ARR.Contains(0))
                                    goto RESTART0;

                                  Combination cc = new Combination() { c1 = ARR[0], c2 = ARR[1], c3 = ARR[2], c4 = ARR[3], c5 = ARR[4], c6 = ARR[5] };
                                  string str = CombinationToString(cc);
                                  if (!hashes.Add(str))
                                  {
                                      goto RESTART0;
                                  }
                            }
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38107713
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл написать что Hashes - это HashSet<string>
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38107718
izoldov-roskini
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все нашел косяк, Random.Next(1,30) - максимальное число которое он возвращает = 29 , чтобы было 30 надо указывать 31 - в документации написано что это верхний исключенный предел
Е мае :)
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38107758
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskini,

о, я что то узнаю
но вот этот фрагмент в предложенном варианте безсмысленен
Код: c#
1.
2.
if (ARR.Contains(0))
         goto RESTART0;


нулей то нет в последовательности ))
и отсутствует проверка на повторения. ну это дело ваше.
...
Рейтинг: 0 / 0
Перебор 500 000 строк
    #38107927
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тему не осилил. так как взорвался мозг.
но если я правильно понимаю то задача
получить комбинацию k - чисел в диапазоне от 1 до n без учета порядка.
- это сочетания. .
теперь нам остается посчитать кол-во. потом в диапазоне 1..cnt генерить номер. (тут его можно проверять на уникальность, или алгоритм чтобы сразу не давал повторений).
далее по номеру строить сочетание. и все. чего там 4 страницы обсуждать, или я не прав?
...
Рейтинг: 0 / 0
89 сообщений из 89, показаны все 4 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перебор 500 000 строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]