我正在编写一个拼字游戏程序,它将随机生成 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 语句来计算每个字母有多少个,如果太多就重新开始?但这似乎不是最好的方法。
不是寻找代码答案,只是寻找如何实现它的想法。
提前致谢。
最佳答案
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;
就足以重新开始。 (数组将被打乱,但所有首字母仍然存在)
关于c - 随机字母分布限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12415165/