【发布时间】:2017-12-08 20:56:18
【问题描述】:
它构建矩阵的每个数字[i][j] 并在每个数字之后通过将数字[i][j] 与它之前的数字[k][l] 进行比较来检查。
起初它通过,因为之前没有数字。
真正的目标是制作一个包含所有不同数字的矩阵。 我正在尝试返回开始检查矩阵的数量,以便在遇到相同的蜜蜂时重新开始检查。
(如果数字相同,它会更改数字。更改后,更改的数字也可以与矩阵开头的任何人相同,所以我想在任何更改时再次检查)
int matris[10][10];
int counter = 0;
bool control = true;
for (int i = 0; i<10; i++) {
for (int j = 0; j<10; j++) {
matris[i][j] = rand() % 99;
do {
for (int k = 0; k <= i; k++) {
for (int l = 0; l <= j; l++) {
if (matris[i][j] == matris[k][l])
{
matris[i][j] = rand() % 99;
counter++;
if(k==i&&l==j)break;
control = false;
}
else control=true;
}
}
} while (control == false);
}
}
它写入的值是 99-0 还是 100-1 并不重要。我的老师要求我们输入 100-1 之间的数字。
真正的问题是它不能用while来控制。它有时会给出相同的数字。它不应该。
counter = 数字改变了多少次。
这里的结果..
计数器:124 矩阵: 54 68 83 55 12 30 97 96 63 91 52 55 8 6 96 46 55 14 65 93 52 94 39 6 92 40 12 86 66 61 11 33 77 46 97 6 16 28 28 46 17 72 16 75 93 81 61 82 34 19 93 72 96 34 48 49 29 54 81 94 72 27 13 8 22 52 12 96 35 66 87 84 79 10 52 24 45 49 82 48 32 64 34 32 82 85 70 72 97 55 44 93 9 86 10 4 33 25 32 99
你可以看看是否有相同的数字,它的排名。 99 97 97 97 96 96 96 96 94 94 93 93 93 93 92 91 87 86 86 85 84 83 82 82 82 81 81 79 77 75 72 72 72 72 70 68 66 66 65 64 63 61 61 55 55 55 55 54 54 52 52 52 52 49 49 48 48 46 46 46 45 44 40 39 35 34 34 34 33 33 32 32 32 30 29 28 28 27 25 24 22 19 17 16 16 14 13 12 12 12 11 10 10 9 8 8 6 6 6 4 按任意键继续 。 . .
【问题讨论】:
-
您正在尝试以 100 种方式分配 99 个唯一值。最后一个单元格不可能找到尚未分配的随机值。
-
因为“kontrol”在第一次迭代后总是假的。
-
考虑:创建一个从 1 到 100 的数字列表。随机选择其中一个数字,将其分配给您的矩阵,然后从列表中删除该数字。从列表中随机选择另一个数字,将其分配给矩阵,然后将其删除。重复直到矩阵已满。 Fisher-Yates shuffle 的变体。
-
您没有在内部循环中搜索所有分配的值。想象一下
i = 1和j = 1。您只会将新值与[0][0]进行比较,但您已将值分配给元素[0][0]到[0][9]。 -
这里我实际上是在试图理解为什么不能很好地工作。我接受可以用更好的方式构建矩阵。
标签: c++ for-loop matrix do-while