1

C++ と Qt で GUI を使って小さなプログラムを書いています。ボキャブラリートレーナーに似ているはずです。自分の勉強に使わせていただきます。

オブジェクトの QList があります (たとえば、文字列としての名前と説明)。

次に、int を含む 2 番目の 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は、プログラムの開始時に1回だけ使用する必要があります。

次に、アルゴリズムについて説明します。最初にすべての値の合計を取得し、それをsumValuesと呼び、次に0からsumValues-1までの乱数を計算します。リストを調べて、値が乱数以上になるまで変数currentSumに合計し、このエントリのインデックスを使用します。値を減らしてリストを並べ替えると、これはより効率的になります。

于 2011-06-28T16:18:13.773 に答える