objective-c - 如何有效地从 1 到 50 中选择几个唯一的随机数,不包括 x?

标签 objective-c random

我有 2 个数字,介于 0 和 49 之间。我们称它们为 xy。现在我想得到一些其他数字,它们不是 x 或 y,但也在 049 之间(我使用的是 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/

相关文章:

iphone - 编写一个应用程序将视频流式传输到 iPhone

algorithm - 使用给定的随机数生成函数查找随机数生成器

objective-c - 如何在 Objective-C 中构建类方法的 NSArray(或 NSMutableArray)?

ios - 飞行模式打开时无法在 iOS 7 中播放本地视频流

java - 如何在 Java 中创建一个没有重复项的简单随机数生成器,并将结果存储在数组中以打印给最终用户?

ios - 使用字典中的值更新多个标签?

c++ - 并发随机数生成

random - 由 sbcl 编译的执行文件不能使随机或使打开文件工作

c++ - 通过 performSelector 传递指针或整数类型

ios - 键盘出现时弹出 View 箭头移动