【问题标题】:How can I randomize an array?如何随机化一个数组?
【发布时间】:2023-03-26 12:06:02
【问题描述】:

这是我遇到问题的程序部分:

// precondition: board is initialized
// postcondition: board is shuffled by randomly swapping 20 values
void shuffle(int board[][NCOLS]) {
    int num = rand();
    num = num %6 + 1;
    for (int i = 0; i < 20; i++) {

    }
}

很确定我已经错了,我想我可能需要rand 函数,但我不确定for 循环如何工作。

基本上有 6 张图片,它们在 4 列中,这是一个记忆游戏,目前它们停留在同一个地方。我需要让它们随机并翻转到你看不到它们但我无法弄清楚的一侧。

我不知道如何随机化列,尤其是当它们以 simple board 和 NCOLS 命名时。

【问题讨论】:

标签: c++ arrays memory random


【解决方案1】:

我明白为什么这很难 - random_shuffle 更喜欢一维数组,而您有一个二维数组。幸运的是,由于数组是连续的,这意味着二维数组也可以作为一维数组访问 - 它只是内存中的 NCOLS x NROWS 元素:

auto begin = &(board[0][0]);
auto end   = begin + NCOLS*NROWS;

【讨论】:

  • 虽然 MSalters 我会把它放在哪里?对不起,我对编程有点陌生,我只是在上一门入门课程,看看它是怎么回事。要初始化它,我会做 shuffle(board);也对吗?但我把它放在for循环中吗?它似乎没有做任何事情
  • 好吧,random_suffle 已经为你循环了。它只需要知道它需要洗牌的元素,所以上面的代码就在调用random_shuffle之前。看看 Igor Tandetnik 的评论,他已经链接到相应的文档。
  • 在这种情况下如何使用 random_shuffle ?到目前为止,我所做的不起作用,看起来像这样: random_shuffle(board.begin(), board.end());这只会给出板需要类类型的错误
  • @Nick:这个错误正是我向您提供上述两个陈述的原因。由于您使用的是原始类型(不是类类型),因此您没有方便的object.begin() 语法。
猜你喜欢
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
相关资源
最近更新 更多