Другие языки программирования и технологии

Правильно я сделал выработку неповторяющихся случайных чисел в диапазоне N?С интернета брал подпрограммки.

Но иногда программа виснет. Точно знаю что дело в ГСЧ
Петя Пилец
Петя Пилец
23 039
НЕ знаток!

если я правильно понимаю как это работает, ГСЧ обычный (т. е. просто отдает случайное число) и прога отвисает через какое-то время то возможная проблема - ГСЧ не может попасть в неповторяющееся число. Допустим у вас есть уже 35 чисел и нужно последнее и допустим это 1, сколько генераций спустя вы получите его? и эта ситуация тем хуже, чем ближе конец диапазона/меньше чисел для генерации осталось. Можно попробовать костыль (но только для последнего числа) в виде суммы всех чисел в указанном диапазоне, от которой, в блоке .a45, отнимать записанный рандом и при достижении последнего числа не мучать ГСЧ а писать остаток от суммы в блоке .ext4, а в условии выхода 36 поменять на 35. но вообще есть другой способ

однако есть у вас ещё пара нюансов: по метке .a46 вы сначала сравниваете число в банке со случайным, а затем только с индексом текущего генерируемого. и тут вопрос а почему не наоборот? если индекс проверяемого равен индексу генерируемого, то в банке на его месте явно "пусто" и сравнивать не счем и незачем, т. е. при их равенстве можно смело писать число без проверки на повтор.
так же можно избежать одного прыга если код по метке .a451 расположить в конце блока .a46
АТ
Алексей Тамагин
5 038
Лучший ответ

Похожие вопросы