用相同的种子产生不重复的数,要具体实现

解决方案 »

  1.   

    namespace random_1000_6
    {
        public partial class Form1 : Form
        {
            public char[] anum ={ '4', '5', '7' };        public bool checkexsit(string a, char[] b)
            {
                bool temp = false;
                for (int i = 0; i < b.Length; i++)
                    if (a.IndexOf(b[i]) > -1)
                        temp = true;
                return temp;
            }        //写日志的函数
            public static void writeLog(string message)
            {
                try
                {
                    StreamWriter writer = null;
                    string filePath = "log.txt";
                    if (File.Exists(filePath))
                    {
                        writer = File.AppendText(filePath); 
                    }
                    else
                    {
                        writer = File.CreateText(filePath);
                    }
                    writer.WriteLine(message);
                    writer.Close();
                }
                catch (Exception e)
                {
                    //把错误日志写到另一个文本文件中 
                }
            }         public Form1()
            {
                InitializeComponent();
                
            }        private void button1_Click(object sender, EventArgs e)
            {
                listBox1.Items.Clear();
                int mm = Convert.ToInt32(textBox1.Text);
                if (mm<=0)
                    throw new ArgumentException("个数必须大于0", "length"); 
                int[] rs = new int[mm];
                Random rdm = new Random(unchecked((int)DateTime.Now.Ticks));
                for (int i = 0; i < mm; i++)
                {
                    rs[i] = rdm.Next(100000, 999999);
                    if (checkexsit(Convert.ToString(rs[i]), anum))
                    {
                        i = i - 1;
                    }
                }
                for (int i = 0; i < mm; i++)
                {
                    listBox1.Items.Add(rs[i]);
                    writeLog(Convert.ToString(rs[i]));
                }
            }        private void button2_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
        }
    }以前做的生成指定个数的随机不重复,且不含某些数字的随机数.比如上面是不含4,5,7的随机不重复的6位数,可以根据需要修改哈
      

  2.   

    用的桶排序,速度相当快了!
        class Program
        {
            //用的是桶排序
            static void Main(string[] args)
            {
                Random rnd = new Random(1);
                int rang = 10000;
                int size = 1000000;//这个是数字大小的范围。
                bool[] flag = new bool[size];
                for(int i = 0;i < rang;i++)
                {
                    int k;
                    do
                        k = rnd.Next(size);
                    while(flag[k]);
                    flag[k] = true;
                }
                for(int i = 0;i < size;i++)
                    if(flag[i])
                        Console.Write("{0}\t", i);
            }
        }
      

  3.   

    如果对随机数没有什么特别的要求,只要求10000个是不同的话,可以模拟洗牌的思路, 先把1-10000放在一个数组里面。然后循环,随机交换其中两个元素的位置,循环N次,就解决问题了,
    时间复杂度是O(n)级的,不能再低了。
      

  4.   

    如果不限定是数字的话,可以使用系统类Guid.NewGuid().ToString()这个是不会重复的
      

  5.   

    17楼能不能说说Guid.NewGuid().ToString()具体是怎么用的,小弟没用过啊,不清楚用法,谢谢啦~~~
      

  6.   

    你试试不就知道了。那个东西不能产生数字的。产生的是guid
      

  7.   

    Guid.ToByteArray()产生的是16个字符的字符数组啊,要怎么样才够一万个啊?
    Guid.ToString()的方法不会用哈~~
      

  8.   

    使用一个种子数,生成10000个随机数,存放在数组中。
    开始排序:;
    使用 array.Sort()对其进行排序。
    遍历排序后的数组,如果相邻的值相等,则另外生成一个随机数来覆盖它,返回到开始排序如果能够到达数组的尾部,则证明此时的数组中没有了相同的数。但是有个问题,就是此时的数组是顺序排列的,那它的随机性应该不够。因此在RUN下列算法:
    重新生成两个数组,一个用于存放最终输出,命名为A,另一个作为临时表,命名为B
    循环,遍历当前数组,并生成一个0-9999之间的随机数,命名为C
    if(B[C] == 0 && A[C] >=0)
    {
        B[C] = A[C];
        A[C] = -1;
    }//假设随机数范围 > 0
    else 重新生成随机数下标这样做的好处就是它的运算量比较小,用空间换取时间。
      

  9.   

    大招J2EE,C++,SAP等人才,有意者请和我联系。 
    MSN:[email protected] 
    e_mail:[email protected]
      

  10.   

    List<int> lst = new List<int>();
                int j = 0;
                Random rd = new Random();
                while (lst.Count < 10000)
                {
                    j=rd.Next(1, 10001);
                    if (lst.Contains(j) == false)
                    {
                        lst.Add(j);
                        Console.Write(j.ToString()+"  ");
                    }
                }