随机抽取数组中N个不重复元素怎么写?求方法,思路

kinghome 2014-05-26 12:01:44
随机抽取数组中N个不重复元素怎么写?求方法,思路
...全文
892 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
李晓东1 2016-09-18
  • 打赏
  • 举报
回复
3楼的方法很好呀
ReyZhang 2014-05-28
  • 打赏
  • 举报
回复
思路: 1.根据数组的个数,来随机生成数组的下标索引,因为根据这个下标索引就可以得到数组中对应的元素。 2.如何存储元素,并保证不重复。这里可以使用NSMutableSet来存储已经获取的随机出来的值,NSMutableSet的作用就是能保证这里存储的值不会出现重复。 3.根据NSMutableSet中已经存储的个数作为while循环的条件,来循环生成随机数。退出循环的条件就是NSMutableSet中的数量已经超过你想要生成的数量。
佳丽恐龙 2014-05-27
  • 打赏
  • 举报
回复
//35选7(随机生成7个不相同的数字35之内)要求尽量提高效率 这个例子的思路楼主可以看看 #include <stdio.h> #include <time.h> #include <stdlib.h> #define TOTAL 35 #define CHOOSE 7 int main() { int arr[TOTAL] = {0,}; int choose[CHOOSE] = {0, }; int i = 0; int randid = 0; for (i=0;i<TOTAL;i++) { arr[i] = i+1; } srand(time(NULL)); for (i=0;i<CHOOSE;i++) { randid = rand()%(TOTAL-i); choose[i] = arr[randid]; arr[randid] = arr[TOTAL-i-1]; } for(i=0;i<CHOOSE;i++) { printf("%2dt", choose[i]); } return 0; }
无条件为你 2014-05-27
  • 打赏
  • 举报
回复
楼上的方法是最简便的。但楼主可能是想要一个算法和或解决问题的思路。 例如一个数组ABC里面有100个元素,那么你随机产生0到99之间的一个int,然后用ABC[i]来取出,当取出一个后,你就把取出来的从数组里移除,然后再产生0到98个int,再取出ABC[i],再移除,再生成0到97个int,这样就保证了随机取出,并不重复。 如果你的数组里面本身已有重复元素,则先过滤一下。比如创建另外一个数组,把原来的数组一个加进去,加的时候先判断是否已经存在。例如用containsObject方法可以判断。
qq2511296 2014-05-26
  • 打赏
  • 举报
回复
NSMutableSet
【源码免费下载链接】:https://renmaiwang.cn/s/tsqb9 洗牌算法是编程领域中一个有趣的议题,常用于模拟各种随机事件,比如电子游戏中抽取卡片、抽奖系统等。本文将探讨三种不同的洗牌算法思路,它们各有优缺点,适用于不同的场景。我们来理解洗牌算法的核心目标:生成一个足够随机的序列,确保每个元素在序列中的位置不可预测。在扑克牌的场景中,这意味着每张牌在洗牌后的位置应随机分布。**思路1:随机插入法**这种方法涉及创建一个长度为54的数组,代表扑克牌的总数,初始状态全为0。算法通过生成0到53之间的随机数,找到尚未被占用的数组位置,将牌放入。如果生成的随机数位置已被占用,则继续生成新的随机数,直至找到空位。这个过程持续到所有牌都被放入数组。优点:此方法保证了最终序列的随机性,因为每个位置都有可能成为任意一张牌的放置处。缺点:随着插入过程的进行,未被占用的位置逐渐减少,导致生成不重复随机数的难度增加,使得算法的时间复杂度较高。**思路2:随机交换法**该方法随机生成两个不重复的整数,然后交换它们在数组中的对应元素重复n次交换操作,理论上n越大,洗牌效果越接近随机。优点:相比思路1,减少了寻找空位的步骤,降低了时间复杂度。缺点:需要足够的交换次数以保证随机性,而且交换次数的选择需要谨慎,否则可能影响洗牌效果。**思路3:随机选取法**这种创新性的思路不预先进行洗牌,而是每次需要取牌时,直接生成一个0到53的随机数,取出对应的牌。当所有牌都被取完时,洗牌过程结束。优点:此方法简洁且高效,不需要额外的存储空间,适合实时游戏中快速取牌的需。缺点:同样面临后期随机数选取困难的问题,可以通过排除已取牌的数字作为随机数源来优化,以降低复杂度。**总结**在实际应用中,思路3(随机选取法)通常是最佳选择,因为它简单、快速且节省空间。改进后的版本通过排除已取出的牌,可以保证在

29,043

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧