【问题标题】:generating random alphabets with some alphabets having a higher frequency of occurence(vc++6.0)使用一些出现频率较高的字母生成随机字母(vc++6.0)
【发布时间】:2010-12-02 06:38:14
【问题描述】:

基本上我有一个生成随机字母的函数。我已经使用 rand() 函数生成数字并将它们转换为相应的 ascii 等价物。 但与其他字母相比,我希望生成的元音数量更多。即 如果生成了 10 个字母,那么应该有 2 个 o,3 个 a 等。 我该怎么做?在 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 个字母以相同的方式生成。

【问题讨论】:

  • 字母 = 字母?字母表是一组字母

标签: c++ random letters


【解决方案1】:

我会用伪代码编写它。假设您定义了字母频率:

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)

那么当你在区间[0; 1)中生成一个随机数n时,你只需要遍历区间数组,找到对应的字母:

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

区间数组也可以使用整数来实现速度。

【讨论】:

  • 实际上我在 vc++6.0 中将拼字游戏作为我的大学项目。所以在我的板子下面我有 7 个按钮,我在每个按钮上显示一个随机字母。所以我想要的是..就像在拼字游戏中我们有.. 1 点:E ×12,A ×9,I ×9,O ×8、N ×6、R ×6、T ×6、L ×4、S ×4、U ×4 2 点:D ×4、G ×3 3 点:B ×2、C ×2、M ×2 , P ×2 4 点:F ×2,H ×2,V ×2,W ×2,Y ×2 5 点:K ×1 8 点:J ×1,X ×1 10 点:Q ×1,Z ×1 所以就像你会从上述集合中选择 7 个随机字母一样,我希望这 7 个字母以相同的方式生成。
【解决方案2】:

您可以添加另一个 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 来更改此几率。

鲍比

【讨论】:

  • 实际上我在 vc++6.0 中将拼字游戏作为我的大学项目。所以在我的板子下面我有 7 个按钮,我在每个按钮上显示一个随机字母。所以我想要的是..就像在拼字游戏中我们有.. 1 点:E ×12,A ×9,I ×9,O ×8、N ×6、R ×6、T ×6、L ×4、S ×4、U ×4 2 点:D ×4、G ×3 3 点:B ×2、C ×2、M ×2 , P ×2 4 点:F ×2,H ×2,V ×2,W ×2,Y ×2 5 点:K ×1 8 点:J ×1,X ×1 10 点:Q ×1,Z ×1 所以就像你会从上述集合中选择 7 个随机字母一样,我希望这 7 个字母以相同的方式生成。
【解决方案3】:

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

【讨论】:

  • 实际上我在 vc++6.0 中将拼字游戏作为我的大学项目。所以在我的板子下面我有 7 个按钮,我在每个按钮上显示一个随机字母。所以我想要的是..就像在拼字游戏中我们有.. 1 点:E ×12,A ×9,I ×9,O ×8、N ×6、R ×6、T ×6、L ×4、S ×4、U ×4 2 点:D ×4、G ×3 3 点:B ×2、C ×2、M ×2 , P ×2 4 点:F ×2,H ×2,V ×2,W ×2,Y ×2 5 点:K ×1 8 点:J ×1,X ×1 10 点:Q ×1,Z ×1 所以就像你会从上述集合中选择 7 个随机字母一样,我希望这 7 个字母以相同的方式生成。
【解决方案4】:

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

权重越高,您希望字母出现的频率越高

要计算一个随机字母,请将所有权重加在一起,然后在 0 和总权重之间选择一个随机值。

然后选择与抽到的数字对应的字母:

如示例: 如果你抽到 0-4 就拿 a,如果你抽到 5-9 就拿 b,10-11 =c 等等

【讨论】:

  • 实际上我在 vc++6.0 中将拼字游戏作为我的大学项目。所以在我的板子下面我有 7 个按钮,我在每个按钮上显示一个随机字母。所以我想要的是..就像在拼字游戏中我们有.. 1 点:E ×12,A ×9,I ×9,O ×8、N ×6、R ×6、T ×6、L ×4、S ×4、U ×4 2 点:D ×4、G ×3 3 点:B ×2、C ×2、M ×2 , P ×2 4 点:F ×2,H ×2,V ×2,W ×2,Y ×2 5 点:K ×1 8 点:J ×1,X ×1 10 点:Q ×1,Z ×1 所以就像你会从上述集合中选择 7 个随机字母一样,我希望这 7 个字母以相同的方式生成。
猜你喜欢
  • 2011-01-10
  • 2013-02-22
  • 2017-09-29
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 2022-01-16
  • 2011-08-18
相关资源
最近更新 更多