纸牌生成算法(随机数组)

 NSArray* array = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],
                      [NSNumber numberWithInt:2],
                      [NSNumber numberWithInt:3],
                      [NSNumber numberWithInt:4],
                      [NSNumber numberWithInt:5], nil];
    NSMutableArray* randomArray = [NSMutableArray arrayWithArray:array];
    NSLog(@"%@", randomArray);
    /*计算机生成的随机数实际上是“伪随机数”,因为它并非真正“随机”。
     当 随机数“种子值”固定时,它生成的随机数序列是固定的。
     例如 第一次产生 41 67 34 0 69 14, 第二次,第三次...产生的还是41 67 34 0 69 14。
     没有 srand() 这句,就是用 默认 种子值。
     用 srand((unsigned)time(NULL)); 就是用当前时间秒数(从1970年到现在的时间间隔,单位秒)为种子。
     时间变,种子就变,产生的 随机数序列 就变化。增进了“随机性”。
     */
    srandom((unsigned int)time(NULL));
    
    NSInteger count = randomArray.count;
    for (int i = 0; i < count; i++) {
        NSInteger target = random() % count;
        //swap
        NSNumber* tmpNumber = [randomArray objectAtIndex:target];
        [randomArray replaceObjectAtIndex:target withObject:[randomArray objectAtIndex:i]];
        [randomArray replaceObjectAtIndex:i withObject:tmpNumber];
     }
    NSLog(@"%@", randomArray);

 

转载于:https://www.cnblogs.com/hanyutong/p/5126484.html

你可能感兴趣的:(纸牌生成算法(随机数组))