【发布时间】:2020-02-04 07:27:46
【问题描述】:
我是 C++ 新手,本周要完成一项非常艰巨的任务。我不会详细介绍它,因为我不想为我完成工作,但是谁能指出我将如何从多维字符串数组中选择随机字符的正确方向?
char gameZero[16][6] = { {'A','A','C','I','O','T'}, {'A','H','M','O','R','S'}, {'E','G','K','L','U','Y'}, {'A','B','I','L','T','Y'}, {'A','C','D','E','M','P'}, {'E','G','I','N','T','V'}, {'G','I','L','R','U','W'}, {'E','L','P','S','T','U'}, {'D','E','N','O','S','W'}, {'A','C','E','L','R','S'}, {'A','B','J','M','O','Q'}, {'E','E','F','H','I','Y'}, {'E','H','I','N','P','S'}, {'D','K','N','O','T','U'}, {'A','D','E','N','V','Z'}, {'B','I','F','O','R','X'} };
目标是打印出这些字符的 4x4 棋盘,在每场游戏开始时从每个数组中随机选择一个字符,这样棋盘就不会是相同的。
任何有关如何执行此操作的建议/提示将不胜感激 - 谢谢!
编辑:
我已经到了可以从两个数组生成随机索引的地步,但是我目前的做法只输出一个字符,而我需要从数组中的 16 个分类中的每个分类中获取一个字符。关于如何从每个输出一个的任何想法?我想我必须将索引生成器放在某种循环中。
mt19937 gen(time(nullptr)); // random number generator
// used to generate random number in specific range
uniform_int_distribution<int> random_outer(0, outer_size - 1);
uniform_int_distribution<int> random_inner(0, inner_size - 1);
int index_outer = random_outer(gen); // used to generate random outer index
int index_inner = random_inner(gen); // used to generate random inner index
cout << gameZero[index_outer][index_inner] << endl;
【问题讨论】:
-
只是为了更好地理解您的问题,例如,如果我们在 4x4 中为第一个元素随机选择“A”,那么其余 15 个元素中的任何一个都不能是“A”?
-
@Abdulkareem 嗨!棋盘上可以出现多少个重复字母没有限制,本质上是对棋盘进行洗牌,以显示 16 个数组中的每一个中的一个字符的随机集合。因此,从技术上讲,如果每个阵列中有一个 A,那么有一个 4x4 的 A 板就可以了。 (那不会是一个非常有趣的游戏,但目前没有什么可以告诉我的)
-
如果是二维数组,维度为
16和6,则生成两个随机整数值。一个在0和15之间,另一个在0和5之间。然后使用该对值作为索引来访问数组的元素。有大量关于在 C++ 中生成随机整数值的信息。 -
@Peter 在做了更多的挖掘之后,我认为这将是最好的方法,现在正在尝试。谢谢!
-
所以一个策略可以从初始化一个指针开始,以指向 16 个数组中的第一个数组,然后在第一次迭代中 pic 一个介于 0 和 5 之间的随机数(您可以使用
rand())和提前指针通过那么多位置,将该指针值分配给新数组的当前元素。在下一次迭代中,使用您从rand()i.e. 获得的结果推进 ponter,通过 ('rand( )' - 5 +1)