没人啊,自己已经解决了,我用的办法是把C的封装成dll,然后在C#中调用。期待有人直接用c#来写,分就给你啦!!!

解决方案 »

  1.   


    //简单看了一下,其实很简单
    //你把下面这句话写成全局静态属性
    static Random aa = new Random((int)(DateTime.Now.Ticks/10000));
    原理是, 用构造虽然使用了随机数,但是在For循环的时候可能在1微秒以内就已经执行结束了. 你产生的aa这个对象其实是同一时间的产物 自然产生的随机数也是一样的..
      

  2.   


    以下是你的代码的修改版:using System;
    using System.Collections.Generic;
    using System.IO;class Program
    {    ///****************************************************
        ///    产生N=100个在(0,50)区间内满足对数正态分布的随机数
        ///*****************************************************/    const int N = 100;
        const int MAX = 50;
        const double MIN = 0.1;
        const int MIU = 2;
        const int SIGMA = 1;
        static Random aa = new Random((int)(DateTime.Now.Ticks / 10000));    static double AverageRandom(double min, double max)//产生(min,max)之间均匀分布的随机数
        {
            int MINnteger = (int)(min * 10000);
            int MAXnteger = (int)(max * 10000);        //Random aa = new Random(unchecked((int)DateTime.Now.Ticks));
            //Random bb = new Random(~unchecked((int)DateTime.Now.Ticks));
            // Random rdm1 = new Random(unchecked((int)DateTime.Now.Ticks));
            //  Random rdm2 = new Random(~unchecked((int)DateTime.Now.Ticks));
            //int randInteger = aa.Next(0, 2147483647) * bb.Next(0, 2147483647);
            //int diffInteger = MAXnteger - MINnteger;
            //int resultInteger = randInteger % diffInteger + MINnteger;
            int resultInteger = aa.Next(MINnteger, MAXnteger);
            return resultInteger / 10000.0;
        }
        static double LogNormal(double x, double miu, double sigma) //对数正态分布概率密度函数
        {
            return 1.0 / (x * Math.Sqrt(2 * Math.PI) * sigma) * Math.Exp(-1 * (Math.Log(x) - miu) * (Math.Log(x) - miu) / (2 * sigma * sigma));
        }
        static double Random_LogNormal(double miu, double sigma, double min, double max)//产生对数正态分布随机数
        {
            double x;
            double dScope;
            double y;
            do
            {            x = AverageRandom(min, max);
                y = LogNormal(x, miu, sigma);
                dScope = AverageRandom(0, LogNormal(miu, miu, sigma));
            } while (dScope > y);
            return x;
        }
        static void Main()
        {
            int i, j;
            for (i = 0, j = 0; i < N; i++)
            {
                double x = Random_LogNormal(MIU, SIGMA, MIN, MAX);
                Console.Write(x);
                //   System.Threading.Thread.Sleep(1000);
                j++;
                if (j == 5)
                {
                    Console.Write("\n");    //每行显示5个数
                    j = 0;
                }        }
            Console.ReadLine();
        }
    }
      

  3.   

    兄台,我想随机500到900的数,为什么miu改为6或者更大时出错呢,“integer divide by zero”,还望回复,谢谢