有谁知道为什么这段代码不起作用
Does anyone know why this code just won't work
对我来说,这是有道理的,但我远不是专家。所以我正在为我的第一门编程课程做一个项目,我整天都在这个问题上,我可能已经做了5个小时的累积研究,试图弄清楚这是怎么可能的。
基本上,我需要为记忆游戏洗牌,我不明白为什么它不起作用。程序运行良好,但没有任何图像更改。我把cout
放在那里只是为了确保值每次都在变化,我只是不知道为什么它不会与这些值交换。我尝试了shuffle和random_shuffle,但我很可能做得不对,如果有人能向我展示我的代码的外观,我将非常感激。我只是很困惑为什么它不起作用。如果有人能提供一个工作例子来解释我哪里出了问题,那将是令人惊讶的。
void shuffle(int board[][NCOLS]) {
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(1, 6);
for (int i = 0; i < 20; i++) {
int randomX = dis(gen);
swap(board[randomX][randomX], board[randomX][randomX]);
cout << "num = " << randomX << endl;
}
}
我用shuffle(board);
调用函数是对的,对吗?这很奇怪,因为已经有一个叫做shuffle的内置函数了,对吗?
swap(board[randomX][randomX], board[randomX][randomX]);
什么都不做的主要原因是您试图将板对角线元素与其本身交换。这导致了一个不变的董事会。
首先,你需要选择两个随机元素,你需要为数组中每个元素的行和列选择随机变量,或者,就像你在例子中所做的那样,你只会选择矩阵对角线上的元素(这些元素的行ID和列ID相等),所以:
for (i = 0; i < 20;) {
int randXA = dis(gen), // I'll suppose this does the right work
randYA = dis(gen),
randXB = dis(gen),
randXB = dis(gen);
if (randXA != randXB || randYA != randYB) {
/* we have two distinct elements. */
swap(board[randXA][randYA], board[randXB][randYB]);
/* we need to increment i conditionally or we can
* finish with less than 20 swaps. */
i++;
} /* if */
} /* for */
请小心,因为假定dis(gen);
正在生成一个有效的数字。如果矩阵不是正方形,则必须进行调整,因为randX<A,B>
和randY<A,B>
具有不同的范围(一个为0..MAXX-1
,另一个为0..MAXY-1
。在这种情况下,必须使用:
int randXA = rand() % MAXX,
randXB = rand() % MAXX,
randYA = rand() % MAXY,
randYB = rand() % MAXY;
相关文章:
- 为什么这段代码不起作用,我该如何解决?
- 为什么这些完全相似的代码不起作用?
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- 注释一行使代码工作,而没有它,代码不起作用
- 我的C++合并排序代码不起作用。我在这里错过了什么?
- C ++函数重新定义(代码不起作用 - 逻辑错误)
- 试图找到一个数字的平方根,但代码不起作用。C++
- 字符串代码不起作用
- 我正在努力在随机数组中查找最小值,有人知道为什么我的代码不起作用?C++
- 从 C++ 转换的 C# 代码不起作用
- 有人可以解释我,为什么我的代码不起作用吗?
- 当我使用长整型时,我的代码不起作用,它与 int 一起工作得很好
- 无法在控制面板中创建轨道栏.示例代码不起作用
- CUDA我的共享内存代码不起作用,我缺少什么
- 为什么 C++ 中的 shell 脚本代码不起作用?
- 为什么C++代码不起作用(strncpy_s)?
- 模板函数声明为 void - 代码不起作用?
- 无法弄清楚为什么这个Arduino代码不起作用?
- "check if member exists using enable_if"中修改的代码不起作用