当前位置:编程学习 > C#/ASP.NET >>

组合算法

33选六的组合算法.  我用c#写,6个for 循环.但运行的时候慢得要死人.现在想求一高效的算法,希望大家多多的指教小弟,谢谢!!!!!!!!!!!!! --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- LZ想买易做图,帮帮他吧!
--------------------编程问答-------------------- 关注,我也想买易做图 --------------------编程问答-------------------- 买易做图挺好的,捐助福利事业 --------------------编程问答-------------------- 另一方法:递归+回溯(用于步确定选择时,)

注:因为是33选6,用6个FOR循环是不错的选择,可是运行速度慢,那是当然的.

因为有1291467969种组合.希望回答已经令你满意. --------------------编程问答-------------------- 这么多组合枚举出来。似乎也没什么意义吧。对于你的要求,我不知道怎么做更好。 --------------------编程问答-------------------- 可以告诉你 --------------------编程问答-------------------- 先把33个数字的顺序随机打乱,然后取前6个就就完事啊,时间空间是N
你那算法的时间空间是N的6次方,比33再打那么几个就没有计算机能计算出来了哦,呵呵 --------------------编程问答--------------------

using System;
using System.Text;

namespace q
{
class myclass
{
static void Main()
{
int length=6;
string s="1234567890ABCDEFGHIJKLMNOPQRSTUVW"; //参与组合的元素
            string ss_length="6";
            string[] strArry = new string[s.Length];
            string[] resultstrArry = new string[length];
            int[] parr = new int[length];
            //Get KeyArry
            for (int xx = 0; xx < s.Length; xx++)
            {
                strArry[xx] = s.Substring(xx, 1);
            }
long All = 0;
            for (int i = 6; i <= length; i++)
            {
                All += Convert.ToInt64(Math.Pow(s.Length, i));
            }
            Console.WriteLine(All.ToString());
            Console.ReadKey();
            for (int i = 6; i <= length; i++)  // i=6 当前要穷举位数 
            {
                int[] Arrpos = new int[i];
                string[] result = new string[i];
                bool create = true;
                int ii, jj;
                while (create)
                {
                    StringBuilder sb = new StringBuilder();
                    for (ii = 0; ii < i; ii++)
                    {
                        result[ii] = strArry[Arrpos[ii]];
                        sb.Append(result[ii]); //<==这里是每列
                    }
                    Console.WriteLine(sb.ToString());
                    //<==这里输出一整行

                    for (jj = i - 1; jj >= 0; jj--)
                    {
                        Arrpos[jj]++;
                        if (Arrpos[jj] != strArry.Length) { break; }
                        else
                        {
                            Arrpos[jj] = 0;
                            if (jj == 0)
                            {
                                create = false;
                            }
                        }
                    }

                }

            }
            Console.ReadLine();
            //DONE!
}
}
}

大概就像这样了
什么?你要写文件?s变量的内容不会设? 自己推一下谷哥度娘 翻一下MSDN就会了
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,