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);
}