社区
iOS
帖子详情
随机抽取数组中N个不重复元素怎么写?求方法,思路
kinghome
2014-05-26 12:01:44
随机抽取数组中N个不重复元素怎么写?求方法,思路
...全文
892
5
打赏
收藏
随机抽取数组中N个不重复元素怎么写?求方法,思路
随机抽取数组中N个不重复元素怎么写?求方法,思路
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
javascript
随机
抽取
0-100之间不
重复
的10个数
主要为大家详细介绍了javascript
随机
抽取
0-100之间不
重复
的10个数,分享了两种简单办法,感兴趣的小伙伴们可以参考一下
洗牌算法
思路
讲解(程序员面试题)
洗牌算法是我在面试过程中遇到的一个问题,我事后做了整理,与大家分享下
思路
,这个文档是我自己
写
的,如要转载,请注明出处。联系方式在文档里有说明。有什么想法或
思路
希望与我一起交流。
洗牌算法讲解(程序员面试题)
【源码免费下载链接】:https://renmaiwang.cn/s/tsqb9 洗牌算法是编程领域中一个有趣的议题,常用于模拟各种
随机
事件,比如电子游戏中
抽取
卡片、抽奖系统等。本文将探讨三种不同的洗牌算法
思路
,它们各有优缺点,适用于不同的场景。我们来理解洗牌算法的核心目标:生成一个足够
随机
的序列,确保每个
元素
在序列中的位置不可预测。在扑克牌的场景中,这意味着每张牌在洗牌后的位置应
随机
分布。**
思路
1:
随机
插入法**这种
方法
涉及创建一个长度为54的数组,代表扑克牌的总数,初始状态全为0。算法通过生成0到53之间的
随机
数,找到尚未被占用的数组位置,将牌放入。如果生成的
随机
数位置已被占用,则继续生成新的
随机
数,直至找到空位。这个过程持续到所有牌都被放入数组。优点:此
方法
保证了最终序列的
随机
性,因为每个位置都有可能成为任意一张牌的放置处。缺点:随着插入过程的进行,未被占用的位置逐渐减少,导致生成不
重复
随机
数的难度增加,使得算法的时间复杂度较高。**
思路
2:
随机
交换法**该
方法
随机
生成两个不
重复
的整数,然后交换它们在
数组中
的对应
元素
。
重复
n次交换操作,理论上n越大,洗牌效果越接近
随机
。优点:相比
思路
1,减少了寻找空位的步骤,降低了时间复杂度。缺点:需要足够的交换次数以保证
随机
性,而且交换次数的选择需要谨慎,否则可能影响洗牌效果。**
思路
3:
随机
选取法**这种创新性的
思路
不预先进行洗牌,而是每次需要取牌时,直接生成一个0到53的
随机
数,取出对应的牌。当所有牌都被取完时,洗牌过程结束。优点:此
方法
简洁且高效,不需要额外的存储空间,适合实时游戏中快速取牌的需
求
。缺点:同样面临后期
随机
数选取困难的问题,可以通过排除已取牌的数字作为
随机
数源来优化,以降低复杂度。**总结**在实际应用中,
思路
3(
随机
选取法)通常是最佳选择,因为它简单、快速且节省空间。改进后的版本通过排除已取出的牌,可以保证在
随机
生成牌和洗牌问题
对于编
写
牌类游戏时用到的洗牌问题和
随机
生成相应牌的
方法
。
C语言实现文件内容按行
随机
排列的算法示例
主要介绍了C语言实现文件内容按行
随机
排列的算法,涉及C语言字符串、数组遍历与
随机
数相关算法实现技巧,需要的朋友可以参考下
iOS
29,043
社区成员
12,470
社区内容
发帖
与我相关
我的任务
iOS
主要讨论与iOS相关的软件和技术
复制链接
扫一扫
分享
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章