随机抽取数组中N个不重复元素怎么写?求方法,思路 nsarray 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼上的方法是最简便的。但楼主可能是想要一个算法和或解决问题的思路。例如一个数组ABC里面有100个元素,那么你随机产生0到99之间的一个int,然后用ABC[i]来取出,当取出一个后,你就把取出来的从数组里移除,然后再产生0到98个int,再取出ABC[i],再移除,再生成0到97个int,这样就保证了随机取出,并不重复。如果你的数组里面本身已有重复元素,则先过滤一下。比如创建另外一个数组,把原来的数组一个加进去,加的时候先判断是否已经存在。例如用containsObject方法可以判断。 //35选7(随机生成7个不相同的数字35之内)要求尽量提高效率这个例子的思路楼主可以看看 #include <stdio.h>#include <time.h>#include <stdlib.h>#define TOTAL 35#define CHOOSE 7int 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;} 思路:1.根据数组的个数,来随机生成数组的下标索引,因为根据这个下标索引就可以得到数组中对应的元素。2.如何存储元素,并保证不重复。这里可以使用NSMutableSet来存储已经获取的随机出来的值,NSMutableSet的作用就是能保证这里存储的值不会出现重复。3.根据NSMutableSet中已经存储的个数作为while循环的条件,来循环生成随机数。退出循环的条件就是NSMutableSet中的数量已经超过你想要生成的数量。 cocos2d-x操作xml后进行保存,结果xml中没有变化 iOS中如何用UIAlertView来确认提交动作? ios怎么调用citrix客户端 救命!如何改变xcode4中的开发者账号? IOS的后台持续定位 iPad的界面怎么是横过来的呢 IOS6 IOS7UILabel计算行高适配问题。懂的大神过来看一下。 开发一个小游戏求助slider puzzle 求大神解决,已经试了很多方式了,就是不行;卡死了。急死本宝宝了。谢谢各位大神! 有没有做过苹果软件开发的大神,现在苹果企业的开发者申请不下来了吗 如何让ios7的表格边角为圆角 超级菜鸟求助~
//35选7(随机生成7个不相同的数字35之内)要求尽量提高效率
这个例子的思路楼主可以看看
#include <stdio.h>
#include <time.h>
#include <stdlib.h>#define TOTAL 35
#define CHOOSE 7int 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;
}
1.根据数组的个数,来随机生成数组的下标索引,因为根据这个下标索引就可以得到数组中对应的元素。
2.如何存储元素,并保证不重复。这里可以使用NSMutableSet来存储已经获取的随机出来的值,NSMutableSet的作用就是能保证这里存储的值不会出现重复。
3.根据NSMutableSet中已经存储的个数作为while循环的条件,来循环生成随机数。退出循环的条件就是NSMutableSet中的数量已经超过你想要生成的数量。