2

基本的に私はランダムなアルファベットを生成する関数を持っています.iはrand()関数を使用してこれを行い、数値を生成し、それらを対応するASCII同等物に変換しました。しかし、母音を他のアルファベットと比較してより大きな数で生成したい.つまり、10個のアルファベットを生成した場合、2つのo、3つのaなどがあるはずです。

編集: 実際、私は大学のプロジェクトとして vc++6.0 でスクラブルを作成しています。私のボードの下には7つのボタンがあり、それぞれにランダムな文字が表示されています。

 1 point:  E ×12, A ×9, I ×9, O ×8, N ×6, R ×6, T ×6, L ×4, S ×4, U ×4
 2 points: D ×4, G ×3
 3 points: B ×2, C ×2, M ×2, P ×2
 4 points: F ×2, H ×2, V ×2, W ×2, Y ×2
 5 points: K ×1
 8 points: J ×1, X ×1
10 points: Q ×1, Z ×1

上記のセットから 7 つのランダムな文字を選択するのと同じように、7 つの文字を同じ方法で生成したいと考えています。

4

4 に答える 4

1

別の rand 関数を追加できます。Fe (申し訳ありませんが、これは単なる擬似コードです)

if(rand(0,10) >= 5) {
    //generate here a vowel at random
} else {
    //generate a normal letter or a random letter (including vowel)
}

これにより、50/50 の確率で母音が生成されます。この確率は、5 を変更することで変更できます。

ボビー

于 2009-09-29T10:19:51.103 に答える
0

すべての値に重みを付けます。例: a=5、b=5、c=2、.... q=1、z=2 など

重みが高いほど、文字を表示する頻度が高くなります

ランダムな文字を計算するには、すべての重みを合計し、0 と totalweight の間でランダムに選択します。

次に、描かれた数字に対応する文字を選択します。

例のように: 0-4 を描いた場合は a を取り、5-9 を描いた場合は b を取り、10-11 =c などなど

于 2009-09-29T10:17:32.360 に答える
0

簡単な解決策は、2 つのリストを使用することです。母音のあるものと子音のあるもの。
ここで、N > M および N+M = アルファベットの最大サイズである N 個のランダムな母音と M 個のランダムな子音を選択して、新しいアルファベットを作成します。

于 2009-09-29T10:18:08.147 に答える
0

擬似コードで書きます。文字の頻度が定義されているとしましょう:

freq['a'] = 0.2
freq['b'] = 0.01
...
freq['z'] = 0.02

すべての要素の合計は明らかに 1 になるはずです。

次に、間隔を指定して配列を定義できます。

intr['a'] = [0; 0.2)
intr['b'] = [0.2; 0.01)
...
intr['z'] = [0.98; 1)

n次に、 intervalで乱数を生成するときに、[0; 1)interval 配列を実行して、それに対応する文字を見つけるだけです。

for(letter = 'a' .. 'z')
  if n in intr[letter] then return letter;

間隔配列は、速度のために整数を使用して実装することもできます。

于 2009-09-29T10:22:00.553 に答える