0

我正在编写一个拼字游戏程序,它将随机生成一个由 7 个字母组成的数组。

这是我的代码,它生成字母并将它们放入数组中,效果很好。

char randomletters (char letters[8], int i){

srand((time(NULL)));


for(i=0; i<7; i++){
    letters[i] = (rand() % 26 + 65);
}


     return letters[8];
}

我唯一的问题是弄清楚如何使用标准的拼字游戏分布来限制某个字母出现的次数。比如'B'只能出现两次。我在想一种方法是 26 if 语句计算每个字母有多少,如果它太多然后重新开始?似乎这不是最好的方法。

不是在寻找代码答案,只是关于如何实现它的想法。

提前致谢。

4

2 回答 2

1
char array[] = "AAAAAAAAABBCCD";

unsigned remaining = sizeof array;


int get_a_letter(void)
{
  unsigned idx;
  int sample;

  if (!remaining) return EOF;

  idx = urnd(remaining);
  sample = array[idx] ;
  array [idx] = array [--remaining];
  array [remaining] = sample; // @Note:1
  return sample;
}

urnd(xxx)是一个函数,应该返回一个介于 0 和 (xxx-1) 之间的随机值,包括.

更新

@Note1:此语句对于绘制随机字母不是必需的,但它有助于下一轮:重置remaining = sizeof array;就足以重新开始。(数组将被打乱,但所有的首字母仍然存在)

于 2012-09-13T22:07:46.390 回答
0

创建一个struct数组来保存一个字母和可以使用的次数。随机选择 0 到 25 之间的数字,如果所选单元格的计数 >0,则将字母添加到机架中减少字母计数,重复直到机架计数 7 个瓷砖,重复整个思考直到剩下少于 7 个字母。

于 2012-09-13T21:43:34.903 回答