1. 程式人生 > >//組合演算法 從M個數中取出N個數,無順序

//組合演算法 從M個數中取出N個數,無順序

  [self myCombineAlgorithm:MutableArray num:5];

//組合演算法 從M個數中取出N個數,無順序

-(void)myCombineAlgorithm:(NSMutableArray*)src num:(int)getnum

{

    if (src.count == 0)

    {

        return;

    }

    else if(src.count < getnum)

    {

        return;

    }

//   int m = src.count;

   int n = getnum;

/*  初始化

  */

objLineIndex = 0;

objarray = [[NSMutableArrayalloc]init];

NSMutableArray* tmp = [[NSMutableArrayalloc]init];

    [self myCombine:src srcIndex:0 i:0 n:n tmp:tmp];

//     int i = objarray.count;

}

/**

 * <p> 遞迴演算法,把結果寫到obj二維陣列物件 </p>

 * @param src

 * @param srcIndex

 * @param i

 *

@param n

 * @param tmp

 * @since royoan 2014-6-15 上午11:22:24

 */

-(void)myCombine:(NSMutableArray*)src srcIndex:(int)srcIndex i:(int)i n:(int)n tmp:(NSMutableArray*)tmp

{

    NSArray *betslist = [self.transaction allBets];

    int j;

    for (j = srcIndex; j < src.count - (n - 1); j++ ) {

        tmp[i] = src[j];

        if (n == 1) {

//            objarray[objLineIndex] = tmp;//tmp為每一次產生的陣列

////////////////////////////////////////////////隨機組合的五個號碼,同當前選擇的號碼比較

            int maxmul = 0;

            for(int i=0;i<betslist.count;i++)

            {

                NSString *str = [[betslist[i] valueForKey:@"betNumbersDesc"]valueForKey:@"mutableString"];

                 NSMutableArray * array = [str componentsSeparatedByString:@","];

                int count =0;

                if(array.count<tmp.count)

                {

                    for(int i=0;i<array.count;i++)

                    {

                        for(int j=0;j<tmp.count;j++)

                        {

                            if([array[i] isEqualToString:tmp[j]])

                            {

                                count++;

                            }

                        }

                    }

                    if(count == array.count)

                    {

                        maxmul++;

                    }

                }

                else

                {

                    for(int i=0;i<tmp.count;i++)

                    {

                        for(int j=0;j<array.count;j++)

                        {

                            if([array[j] isEqualToString:tmp[i]])

                            {

                                count++;

                            }

                        }

                    }

                    if(count == tmp.count)

                    {

                        maxmul++;

                    }

                }

            }

            if(maxmul > Maxmulcount)

            {

                Maxmulcount = maxmul;

            }

////////////////////////////////////////////////隨機組合的五個號碼,同當前選擇的號碼比較

//            objLineIndex ++;

        } else {

            n--;

            i++;

            [self myCombine:src srcIndex:j+1 i:i n:n tmp:tmp];

            n++;

            i--;

        }

    }

}