现在的位置: 首页 > 综合 > 正文

长度为n的数组中取m个元素组合

2012年08月04日 ⁄ 综合 ⁄ 共 1392字 ⁄ 字号 评论关闭
 /// <summary>
        /// 长度为n的数组中取m个元素组合
        /// </summary>
        /// <param name="data"></param>
        /// <param name="m"></param>
        /// <returns>空格分开的各个组合(每个组合用‘+’连接)</returns>
        private string GetMNZhuHe(string[] data, int m)
        {
            string ZhuHeSum = "";
            int n = data.Length;
            int min = (0x01 << m) - 1;//00111111
            int max = min << (n - m);//11111100
            int j;
            int k;
            for (int i = min; i <= max; i++)
            {
                j = 0;
                k = i;
                while (k > 0)
                {
                    j += (int)(k & 0x01);
                    k >>= 1;
                    if (j > m)
                    {
                        break;
                    }
                }
                if (j == m)
                {
                    k = 0x01;
                    string sum_zuhe = "";
                    for (int l = n - 1; l >= 0; l--)
                    {
                        if ((k & i) == k)
                        {
                            if (sum_zuhe == "")
                            {
                                sum_zuhe = data[l];
                            }
                            else
                            {
                                sum_zuhe += "+" + data[l];
                            }
                        }
                        k <<= 1;
                    }
                    ZhuHeSum += sum_zuhe + " ";
                }
            }
            return ZhuHeSum.Trim();
        }

抱歉!评论已关闭.