我有 2 个数字,介于 0 和 49 之间。我们称它们为 x
和 y
。现在我想得到一些其他数字,它们不是 x 或 y,但也在 0
和 49
之间(我使用的是 Objective C,但这更像是一个我认为一般理论问题?)。
我想到的方法是:
int a;
int b;
int c;
do {
a = arc4random() % 49;
} while ((a == x) || (a == y));
do {
b = arc4random() % 49;
} while ((b == x) || (b == y) || (b == a));
do {
c = arc4random() % 49;
} while ((c == x) || (c == y) || (c == a) || (c == b));
但这对我来说似乎有点不好,我不知道,我只是想学习成为一个更好的程序员,对于最佳实践来说,最优雅的方法是什么?
最佳答案
你可以使用一个叫做 Fisher-Yates shuffle 的东西.这是一种从某些集合中生成随机排序的值列表的有效算法。您将首先从要从中获取随机值的值列表中排除 N,然后执行洗牌。
关于objective-c - 如何有效地从 1 到 50 中选择几个唯一的随机数,不包括 x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2502386/