gpt4 book ai didi

ios - 从给定数字生成随机数

转载 作者:搜寻专家 更新时间:2023-10-30 20:19:39 25 4
gpt4 key购买 nike

我被困在一个关于随机数的问题上。我正在使用 arc4random() 生成随机数。我想首先生成 0-9 之间的随机数。所以我正在使用:

int RandomNumber = arc4random() % 9;

很好。现在假设我得到了 8。我不希望我的新随机数是 8。所以我做了以下操作:

NSMutableArray *aryTemp = [NSMutableArray new];
for (int i = 0; i < [aryTemp Count] < 9; i++) {
int RandomNumber;
do {
RandomNumber = arc4random() % 9;
}
while ([aryTemp containsObject:[NSNumber numberWithInt:RandomNumber]])
[aryTemp addObject:[NSNumber numberWithInt:RandomNumber]];
}

所以我生成一个随机数而不是将它添加到数组而不是检查下一个随机数是否是先前生成的随机数?如果不是,则将其添加到数组中。

它适用于很少的起始数字,但是当我当时没有几个选项时,我生成所需随机数的机会非常少,而且由于冗余随机数,while 循环过程需要很多时间。

我要找的是随机数 0, 1, 2, 3, 4, 5, 6, 7, 8, 9如果我下次第一次得到 6 随机数必须在这些数字中只有 0, 1, 2, 3, 4, 5, 7, 8, 9

最佳答案

编辑:answer上面评论中的链接提出了一个更优雅的解决方案——就地洗牌数组,尽管它使用与我天真的方法相同的原则:)

如果我没理解错的话:您想要随机选择 0-9 范围内的所有项目。

我最初的方法是制作一个包含范围内所有元素的包。每次您随机选择一件元素时 - 将其从包中取出,这样您就不会再次选择它。

下面的代码片段应该可以实现这一点:

int randomNumber;

// Fill remainingNumbers array with numbers 0-9
NSMutableArray *remainingNumbers = [NSMutableArray array];
for (int i = 0; i < 10; i++) {
[remainingNumbers addObject:[NSNumber numberWithInt:i]];
}

// Create tempNumbers array to store our random numbers in
NSMutableArray *tempNumbers = [NSMutableArray array];


for (int i = 0; i < 9; i++) {
// Create a random number in the range of the indexs for remainingNumbers array
int maxIndex = [remainingNumbers count] -1;
randomNumber = arc4random() % maxIndex;

// Add random number to tempNumbers array
[tempNumbers addObject:[remainingNumbers objectAtIndex:randomNumber]];

// Remove the number from the remaining numbers so we don't add duplicates
[remainingNumbers removeObjectAtIndex:randomNumber];
}
// Add final number
[tempNumbers addObject:[remainingNumbers objectAtIndex:0]];


// Print the array of 'randomly selected numbers'
NSLog(@"The array is: %@", tempNumbers);

关于ios - 从给定数字生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15680582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com