C# 组合取值

       private void button3_Click(object sender, EventArgs e)
        {
            List<int> list = new List<int> { 0, 1, 2, 5, 8, 4, 12, 32 };
            string sResult = string.Empty;
            int iTemp = 0;
            GetCombination(list,2,ref sResult, ref iTemp);// 最终结果放在 sResult中

            Common.DisplayMsg(this.Text, sResult);
        }

        // list为源,iItemCount表示取出几个元素,sTemp 为最终结果
        // iTemp为临时变量,没有实际意义;iIndex 表示第几轮递归,也没有实际意义
        private void GetCombination(List<int> list,int iItemCount,ref string sTemp,ref int iTemp,int iIndex=0)
        {
            ArrayList arrTemp = new ArrayList();

            if (iItemCount <= 0) return;
            if (iIndex == list.Count) return;

            int iTempNothing = 0;//用于后面作为判断取出元素的标识,也没有实际意义

            for (int i = iIndex; i < list.Count; i++)
            {
                iTemp++;
                if (!arrTemp.Contains(list[i]))
                {
                    arrTemp.Add(list[i]);
                }

                if (arrTemp.Count == iItemCount )
                {
                    sTemp += "[";
                    iTempNothing = iItemCount;
                    while ((iTempNothing--)>=1)
                    {
                        sTemp += arrTemp[iTempNothing] + ",";
                    }

                    sTemp = sTemp.TrimEnd(',');

                    sTemp += "]";
                    arrTemp.RemoveAt(iItemCount-1);//删除 最后一个元素
                }

                if (iTemp == list.Count)
                {
                    sTemp += Convert.ToChar(Keys.Return);
                    iIndex++;
                    iTemp = iIndex;
                    arrTemp.Clear();

                    GetCombination(list, iItemCount,ref sTemp, ref iTemp, iIndex);
                }
            }
        }

       public static void DisplayMsg(string sCaption, string sMsg)
       {
           sMsg = sMsg.TrimEnd('!').TrimEnd('!') + " !";
           MessageBox.Show(sMsg, sCaption);
       }

 


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值