从0到n的排列的一种求法

原创 2006年05月19日 00:20:00

从0到n的排列的一种求法(效率低,急需改进)

用到了split和backgroundWorker。textbox用来接收输入,lixtbox输出。button开始计算。

  private void button1_Click(object sender, EventArgs e)
        {
            int needtocal = int.Parse(textBox1.Text);
            backgroundWorker1.RunWorkerAsync(needtocal);

        }

        //计算
        public string CalPermutation(int n)
        {
            string result = "";
            if (n < 0) return "";
            if (n == 0)
            {
                result = "0";
            }
            else if (n == 1)
            {
                result = "01,10";
            }
            else
            {

                string last = CalPermutation(n - 1);
                string delimStr = ",";
                char[] delimiter = delimStr.ToCharArray();
                string[] split = null;
                split = last.Split(delimiter);
                foreach (string s in split)
                {
                    for (int i = 0; i < n + 1; i++)
                    {
                        if (result != "")
                            result += ",";
                        result += s.Insert(i, n.ToString());

                    }
                }
            }
            return result;
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            e.Result = CalPermutation((int)e.Argument);
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // First, handle the case where an exception was thrown.
            if (e.Error != null)
            {
                MessageBox.Show(e.Error.Message);
            }
            else
            {
                // handle the case where the operation
                // succeeded.
                string delimStr = ",";
                char[] delimiter = delimStr.ToCharArray();
                string[] split = null;
                split = e.Result.ToString().Split(delimiter);
                foreach (string ss in split)
                {
                    listBox1.Items.Add(ss);   

               }
            }
        }

相关文章推荐

n维矩阵的特征值的一种新求法

  • 2011年08月29日 15:16
  • 5KB
  • 下载

poj3070 Fibonacci 斐波那契数列的第n项的矩阵求法

对于满足(F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2)的斐波那契数列,第n项可由矩阵求出公式如下:...

c++对一元n次方程近似解求法(不涉及大数)

二分法求解

算法设计与分析 0-1背包的多种求法

求解整数背包问题   整数背包问题简介      整数背包问题即0/1背包问题。对每种物品或者全取或者一点都不取,不允许只取一部分。现有n种物品,对1 穷举法:     求解整数...

数位全排列算法(可重复)之求和:非递归求法

问题描述:任意给定一个5位以内的整数(其中这个数字各个数位都不含有0,但是允许数位上的数字重复),然后对这个数字的各个数位的数字任意颠倒,成为新的数字组合,然后对这个组合里面的数字进行求和。 举个例...
  • Kaiwii
  • Kaiwii
  • 2012年03月22日 16:44
  • 2870

排列组合的求法&next_permutation

即数学上的排列组合,这里提供了两种方式。 第一种是用STL头文件algorithm中的next_permutation或prev_permutation函数。但是这样只能求全排列,不能求组合。这种方法...

POJ-1150(求排列数P(n,m)中最后一个非0的数字)

1    如何求出n阶乘中质因数x(比如说5)出现的次数? int get(int m, int n)//计算n!中质因子m的出现次数 { if (n == 0) return 0; re...

POJ-1150(求排列数P(n,m)中最后一个非0的数字)

1.如何求出n阶乘中质因数x(比如说5)出现的次数? int get(int m, int n)//计算n!中质因子m的出现次数   {       if (n == 0) retur...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从0到n的排列的一种求法
举报原因:
原因补充:

(最多只允许输入30个字)