У меня, у меня есть!
Как-бы в таком случае не понятно зачем добавлять лишнюю локальную переменную, делать 2 точки выхода (которые заставят компилятор, возможно балансировать стек по-другому), вобщем, запутаная логика, и не понятно зачем. (отдельно замечу, что скорее всего, с точки зрения производительности, скорее всего никакой разницы с первым "наивным" алгоритмом не будет). Где-то у Лебедева была выставка идиотских проектов пульта для лифта - люди чего только ради оригинальности не придумают... (аналогично, новички зачем-то стремятся часто использовать "тернистый оператор", или без необходимости вместо i++ ++i писать, наверное от желания расплачиваться в ресторане подписью на салфетке) а потом к любимой девушки на свидание опаздываешь
> При каждом рандоме нужно крутить цикл с суммированием веса, чтобы понять, какое число выпало
Не нужно, см. мой последний вариант
Оффтоп:
Если вы думали, что идиоты, которые проектируют пульты для лифтов встречаются только на сайте Лебедева, то, не далее чем на прошлой неделе нужно было мне зайти в гости к представителям одной немаленькой конторы снимающий 10й этаж в 12-ти этажном здании. А теперь, устройство тамошнего лифта: Перед входом (т.е. снаружи) - пульт с 10 кнопками, как на телефоне, только без # и * + одна большая красная кнопка неопределенного назначения. Я на нее и нажал. Захожу в лифт - а в нем пульта нету. Спрашиваю у других пассажиров: "а не подскажете, как проехать на 10-й этаж?". На что мне ехидно так - а раньше думать надо было, вот сейчас выйдешь, набери номер этажа, и жми красную кнопку, лифт за тобой приедет и на заказаный этаж отвезет.