Я считаю, что фундаментальная проблема здесь в том, что вы звоните srand каждый раз, когда хотите создать случайное число.
srand задает ваш случайный ряд, а rand выбирает один номер этого ряда. Реализация classi c rand не самая лучшая, но она должна генерировать достаточно сбалансированный ряд.
Проблема в том, что вы не выбираете номера этого вида сбалансированных рядов, вы выбираете первый номер снова и снова разных серий. Таким образом, у вас нет гарантий сбалансированного распределения.
Используйте srand () один раз, rand () many.
Позвольте мне также предложить подход C ++ 11.
#include <rand>
Во-первых, вы можете создать генератор случайных чисел с начальным числом.
std::mt19937 rand_gen(time(0));
Затем вы создадите заданное распределение.
std::uniform_int_distribution<uint32_t> series_1_6(1,6);
И затем наконец вы можете получить свой номер.
std::cout << series_1_6(rand_gen) << std::endl;
Здесь у вас есть несколько хороших ссылок:
Генерация случайных чисел в C ++ 11: как генерировать, как это работает?
Как сгенерировать случайное число в C ++?