我正在用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%的时间,但更常见的是,就像词汇训练师一样。
答案 0 :(得分:2)
首先说一句:你应该在程序开头只使用一次qsrand。
现在算法:首先得到所有值的总和,让我们称之为sumValues,然后计算0和sumValues-1之间的随机数。浏览列表并将值汇总到变量currentSum中,直到它大于或等于随机数,并使用此条目的索引。如果您通过减少值对列表进行排序,这将更有效。