1. 从一个范围内获取一组不重复的随机数,返回这个数组:
头文件:
/*
获取随机数
@param count获取随机数的个数
@param from随机数的最小值
@param to最大值
@return一组随机数
*/
+ (NSMutableArray*)getRandomArrayOfCount: (NSInteger)count rangeFrom:(NSInteger)from to:(NSInteger)to;
实现:
+ (NSMutableArray*)getRandomArrayOfCount:(NSInteger)count rangeFrom:(NSInteger)from to:(NSInteger)to {
if(to-from+1< count) {
VDLog(@"个数超出取值范围");
return nil;
}
NSMutableArray*array = [NSMutableArray new];
for(; ; ) {
NSString*object = [NSString stringWithFormat:@"%ld", from+arc4random()%(to-from+1)];
if(array.count==0) {
[array addObject:object];
continue;//数组元素个数为空,添加随机数,跳出本次循环
}
if([array containsObject:object]) {
continue;//数组内包含本次循环的随机数,跳出本次循环
}
[array addObject:object];
if(array.count== count) {
return array;//个数达到要求,循环结束
}
}
}
2.组合算法
头文件:
/**
计算出排列组合个数
例如从11个中选取5个,totalNum就是11,pickNum就是5
@param picNum目标个数
@param totalNum抽取对象个数
@return所有的排列组合的个数
*/
+ (NSInteger)getAllNumOfPossibleWithPicNum:(NSInteger)picNum totalNum:(NSInteger)totalNum;
实现:
+ (NSInteger)getAllNumOfPossibleWithPicNum:(NSInteger)picNum totalNum:(NSInteger)totalNum {
if(picNum > totalNum) {
return 0;
}
else{
NSInteger num1 = [self factorialWithStartNumber:totalNum - picNum +1 endNumber:totalNum];
NSInteger num2 = [self factorialWithStartNumber:1 endNumber:picNum];
returnnum1/num2;
}
}
/**
阶乘
@param startNumber起始数
@param endNumber结束数
@return阶乘结果
*/
+ (NSInteger)factorialWithStartNumber:(NSInteger)startNumber
endNumber:(NSInteger)endNumber
{
NSInteger result =1;
for(; startNumber <= endNumber; startNumber ++) {
result = result * startNumber;
}
returnresult;
}