求高效的2-6位字符串穷举程序代码,请一份 完整搞笑的C#代码,100分送上谢谢 

解决方案 »

  1.   

    额·原来我没说清楚....我的意思就是枚举所有2位-6位的字符串
    例如:aaa,aab,aac,aad...aba,abb,abc,abd...zzx,zzy,zzz
    我所谓的穷举就是这个意思.
    我想要的就是aa-zzzzzz这个范围内所有字母的全排列.
    想找一个效率相对较高的算法.请高手赐教.....
      

  2.   

    结果是一个很大的序列.用[0-9][a-z][A-Z]共62个字符,排列到前4位,就84.5MB了。
    结果在内存很容易溢出,所以结果直接写入一个文本文件了。
    下面是我以前写的一个算法,首先是正确的,是不是效率最高不知道,你可以试试能否找出效率更高的来。
    private void button1_Click(object sender, EventArgs e)
    {
        Char[] chr = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ".ToCharArray();  // 自已再往里补充吧    File.WriteAllText(@"C:\file0.txt", "", Encoding.Default);
        for (int i = 0; i < chr.Length; i++)   // 取 i个字符长度
        {
            StreamReader sr = new StreamReader(@"C:\file" + i + ".txt", Encoding.Default);
            StreamWriter sw = new StreamWriter(@"C:\file" + (i + 1) + ".txt", false, Encoding.Default);
            string str = "";
            while (true)
            {
                str = sr.ReadLine();
                if (str == null && i != 0) { break; }
                if (i == 0) { str = ""; }
                for (int j = 0; j < chr.Length; j++)
                {
                    sw.WriteLine(str + chr[j].ToString());
                }
                if (i == 0) { break; }
            }
            sr.Close();
            sw.Close();
        }
        if (i == 3) break;  //计算到第4位
    }(1)为了便于测试用了i个文件分别存结果 
    file1.txt  1个字符 
    file2.txt  2个字符 
    file3.txt  3个字符 
    ................. (2)读上一个文件的每行,分别加上chr[]中的每个字符,写到下一个文件。 (3)为了使结构更清晰,开始写了个空文件 file0.txt
      

  3.   

    实现初始化一个巨大的数组
    =〉
    事先初始化一个巨大的数组你要的是穷举的效率,
    初始化不算在内,直接用char多重循环就可以了
    数组放不下,可以用多个文件~
      

  4.   

    没有什么高不高笑的吧  class Program
        {
            static void Main(string[] args)
            {
                PWD();
            }        static public string PWD()
            {
              
                 
                    char[] chars = "0123456789abcdefghijklmnopqrstuvwxyz".ToCharArray();
                    int maxlength = 6;
                    int minlength = 2;
                    Random ran = new Random();
                    while (true)
                    {
                        System.Text.StringBuilder sb = new System.Text.StringBuilder();
                        for (int i = 0; i < ran.Next(minlength, maxlength); i++)
                        {
                            sb.Append(chars[ran.Next(chars.Length - 1)]);
                        }
                        Console.WriteLine(sb.ToString()+Environment.NewLine);
                        
                    }
                
            }
        }
      

  5.   

    谢谢 VIENA 其实说的最简单就是:用一个相对较快的方法生成一个 从 全小写无数字的 字符串 字符串长度分别为2 3 4 5 6 的密码字典(a-z的全排列,字符串的长度2-6位),不知道表述明白没有我的表达能力确实不好·
      

  6.   

    19楼的哥们,你的代码有问题:会出现重复的字符,用随机Random 来做这个事情可以说明您误解了我的意思,
    我要得相当于密码字典这样一个结果,你的代码会出现相同的字符串。
      

  7.   

    你的问题应该是两部1 生成一个字典文件,这个文件用一个临时程序生成,因为是一次性的,只要结果不要过程,所以不存在社么效率问题,直接循环生成就可以这没啥可说的2 如何高效地分部读字典文件到内存,用什么数据结构来保存这个字典这第2部才是你要问的吧?
    答:建议用二进制方式读写,因为a到z在ASCII的范围内,可以用byte来编码的;数据结构当然是用数组
      

  8.   

    如果你只是要一个数字与字符串的一一对应,那只是一个简单算法可以搞定的事,与穷举、字典啥的八竿子都打不着了 orz
      

  9.   


    using System;
    using System.Windows.Forms;class 这是一份完整搞笑的代码
    {
    static void Main()
    {
    for(;;)
    MessageBox.Show("真的很搞笑");
    }
    }
    够完整 够搞笑吧
      

  10.   

    我的意思很简单,以最快的速度产生aa-zzzzzz的穷举结果 保存到文件,不讨论读的问题。关键怎么做才能快一些生成这些东西,因为这些穷举的结果并不小。让用户等待的时间少一些。
      

  11.   

    效率的生成字典文件?有这必要吗?
    我说过很多次了,字典生成只需要一次,下次你只要copy这个文件就可以了~
      

  12.   


    说了那么多,都是对牛弹琴啊
    让用户等待?
    你直接把一次性生成的字典文件copy就是了,为啥要每次重新生成呢?
      

  13.   

    我就不明白,一个简单问题搞得那么复杂
    你认为如下这样写效率不高吗?
    以下代码只写了2位的,3到6位只要复制中间的把2改为相应数字即可StreamWriter sw = new StreamWriter(@"C:\word.dic");
    char[] chars = new char[2];
    for (char c1 = 'a'; c1 <= 'z'; c1++)
    {
        chars[0] = c1;
        for (char c2 = 'a'; c2 <= 'z'; c2++)
        {
            chars[1] = c2;
            sw.WriteLine(new string(chars));
        }
    }
    sw.Close();
      

  14.   

    sorry,改正下
    3到6位不仅要把2改为相应数字,还要增加循环,如6位就要六重循环
    如果你还嫌效率不够高,可以使用unsafe代码,或者直接用C++来写
    简单的多重循环而已~
      

  15.   

    恩,用哈希表或者字典,add新键来避免重复
    代码就不写了