Dice Rolling

Problem #43

Tags: games floating-point random arithmetic

Who solved this?

Back to English version

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

Пусть наш генератор выдаёт случайные вещественные числа в диапазоне от 0 (включительно) до 1 (не включая) - вы можете встретить такой в языках вроде Basic, Java, Matlab и т.п.

Нам нужно преобразовать эти дробные значения в целые, в диапазоне от 1 до 6. Это можно сделать например так:

  1. Умножим случайное число на N - число различных значений которые нам нужны - т.е. в данном случае умножим на 6, так что результат будет вещественным числом от 0 (включая) до 6 (не включая)
  2. Теперь возьмём целую часть от результата (т.е. округлим вниз вызвав функцию floor или преобразовав в int) - значение станет одним из 0, 1, 2, 3, 4, 5 с равной вероятностью.
  3. Поскольку нас интересуют числа от 1 до 6 просто добавим 1 к полученному результату.

Итак, даны несколько вещественных значений в диапазоне [0 .. 1) (полученные как раз от генератора случайных чисел) - их нужно преобразовать в значения очков игрального кубика с помощью вышеописанного алгоритма.

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

Пример:

входные данные:
6
0.59558786964
0.861037873663
0.385597702116
0.246237673331
0.808033385314
0.0544673665427

ответ:
4 6 3 2 5 1
You need to login to get test data and submit solution.