iOS彩票类排列组合算法

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;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容