Случайный алгоритм с приоритетом на один конец - PullRequest
1 голос
/ 28 июня 2011

Я пишу небольшую программу с графическим интерфейсом на C ++ и Qt.Предполагается, что он похож на словарный тренажер.Я буду использовать его для собственного изучения.

У меня есть QList объектов (например, имя и описание в виде строки).

Затем у меня есть второй QList с целыми числами.Для каждого объекта в моем другом списке, int находится в этом списке.Начальное значение 50 для каждого объекта;если пользователь нажимает правильно, он уменьшается, и наоборот.Поэтому объект со значением 70 должен показываться пользователю чаще, чем объект со значением 30. Поэтому в методе правильного ответа я увеличиваю / уменьшаю его, сортирую QList и использую мой случайный алгоритм:

if(packList.count()==0) // the QList with objects
        return;
    int Min = 0;
    int Max = packList.count()-1; // -1 because i need the index
    qsrand(QTime::currentTime().msec());

        if (Min > Max)
        {
            int Temp = Min;
            Min = Max;
            Max = Temp;
        }
        int randNum = ((rand()%(Max-Min+1))+Min);
    setPage(randNum); // randNum will be used as index in this method

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

1 Ответ

2 голосов
/ 28 июня 2011

Первое замечание: вы должны использовать qsrand только один раз в начале программы.

Теперь к вашему алгоритму: сначала получите сумму всех ваших значений, давайте назовем ее sumValues, затем вычислим ваше случайное число от 0 до sumValues-1. Просмотрите список и суммируйте значения в переменной currentSum, пока она не станет больше или равна вашему случайному числу, и используйте индекс этой записи. Это будет более эффективно, если вы сортируете свой список по убыванию значений.

...