1

我正在用 C++ 和 Qt 编写一个带有 GUI 的小程序。它应该类似于词汇训练器。我会把它用于我自己的学习。

我有一个对象的 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% 的时间,而是更频繁地出现,就像词汇训练师一样。

4

1 回答 1

2

首先声明:您应该在程序开始时只使用一次 qsrand。

现在到你的算法:首先得到所有值的总和,让我们称之为 sumValues,然后计算 0 和 sumValues-1 之间的随机数。遍历您的列表并将值相加到变量 currentSum 中,直到它大于或等于您的随机数,并使用此条目的索引。如果您通过减少值对列表进行排序,这将更有效。

于 2011-06-28T16:18:13.773 回答