c - 随机字母分布限制

标签 c

我正在编写一个拼字游戏程序,它将随机生成 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/

相关文章:

c - 对数组和指针使用 sizeof 的实验

c++ - 将命令行工具转换为 xcode 中的 .app

c - 用 C 语言打开 LED

C读取文本文件

c - scanf() 和 gets() 的意外行为

android - ndk-build gstreamer android 教程 : cannot find -lrt

c - 有什么充分的理由不使用 'define' 和可变参数长度吗?

c - 为什么 tv_sec 和 tv_usec 在确定计时器的持续时间方面都很重要?

c - Rust 析构函数和所有权

c - 如何在Linux中使用C语言使用 "write"系统调用?