使用一些具有更高出现频率的字母生成随机字母(vc ++ 6.0)

时间:2009-09-29 10:09:59

标签: c++ random letters

基本上我有一个生成随机字母的函数。我已经使用rand()函数生成数字并将它们转换为相应的ascii等价物。 但我希望与其他字母相比,元音的生成数量更多 如果已生成10个字母,那么应该有2个,3个等。 我怎么做?在vc ++ 6.0中。

修改 实际上我正在拼字游戏作为我在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 个答案:

答案 0 :(得分:1)

您可以添加另一个rand功能。 F.E. (对不起,这只是伪代码)

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来改变这个机会。

巴比

答案 1 :(得分:0)

给每个值一个重量。例如。 a = 5,b = 5,c = 2,...... q = 1,z = 2等

重量越高,您希望字母显示的次数越多

计算一个随机字母,将所有权重加在一起,并在0和总重量之间选择一个随机数。

然后选择与绘制的数字对应的字母:

如示例中所示: 如果你画了0-4你拿a,如果你画5-9你拿b,10-11 = c等等

答案 2 :(得分:0)

一个简单的解决方案是使用2个列表。一个带有元音,一个带有辅音。
现在通过选择N个随机元音和M个随机辅音构建你的新字母,其中N> 1。 M和N + M =字母表的最大大小。

答案 3 :(得分: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中生成随机数[0; 1)时,您只需要运行区间数组并找到与之对应的字母:

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

也可以使用整数来实现间隔数组。