不想了,感觉的可用递归,n个数的组合可以拆为n-1的组合加上n-1的组合配上一个数字n,这样的话做一个返回组和指针的地归函数fun(n),n不为1的时候用n和fun(n-1)返回的组合构成新的组合,当n为1的时候返回一个只有1的组合。

解决方案 »

  1.   

    string[] a={"1","2","3","4"}; private void button1_Click(object sender, System.EventArgs e)
    {
    for(int i=1;i<=a.Length;i++)
    {
    BuildNum(i,0,"");
    }
    } private void BuildNum(int level,int start,string num)
    {
    string num1;
    for(int i=start;i<a.Length;i++)
    {
    num1=num+a[i];
    if(level==1)
    {
    listBox1.Items.Add(num1);
    }
    else
    {
    BuildNum(level-1,i+1,num1);
    }
    }
    }
      

  2.   


    //没事 就 写了下,类型用的是 string ,你可以自己改下,返回的建议用StringBuilder,不然很慢!
    using System;
    using System.Text;namespace suanfa
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
    static StringBuilder num(string[] feng,int numlength)
    {
    StringBuilder strn=new StringBuilder();

    if(numlength==0)
    return strn;


    for(int i=0;i<feng.Length;i++)
    {
    if(numlength==1)
    {
    strn.Append(feng[i].ToString()+","); }
    else
    {
    string temp=num(feng,numlength-1).ToString();
    string[] n_1=temp.Split(',');
    for(int ii=0;ii<n_1.Length-2;ii++)
    {
    if(n_1[ii]!=feng[i] && n_1[ii].IndexOf(feng[i])==-1)
    {
    strn.Append(feng[i]+n_1[ii]+",");
    strn.Append(n_1[ii]+feng[i]+",");
    }
    }
    }
    }


    return strn;
    }

    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    string[] feng={"1","2","3","4","5","6"};

    int length=feng.Length;
    for(int i=1;i<=length;i++)
    {    
    Console.WriteLine("取{0}位数组合,按任意键开始",i);
    Console.ReadLine();
    Console.WriteLine(num(feng,i).ToString());
    Console.WriteLine("");
    }
    Console.ReadLine();
    }
    }
    }