回 帖 发 新 帖 刷新版面

主题:[讨论]请多指教~~~

做了个可以在任意范围内产生任意数量并且不重复的随机数..并从小到大排序..
但是总觉得这算法不够好...请高手指教~~
using System;
using System.Collections.Generic;
using System.Text;

namespace random
{
    class Program
    {
       // public static int u = 0;
        static int[] GetRandomNO(int x,int y)
        {
            int[] n = new int[x];
            Random r = new Random();
            for (int i = 0; i < x; i++)
            {
                n[i] = r.Next(y);
            }
            return n;
        }
        static int[] Clear(int[] a,int y)
        {
            int l = 0;
            int[] b=new int[a.Length];
            for (int i = 0; i < a.Length-1; i++)
            {
                for (int j = i+1; j < a.Length; j++)
                {

                    if (a[i] == a[j])
                    {
                        a[j] = y;
 
                    }
                }
            }
            for (int k = 0; k < a.Length; k++)
            {
                if (a[k] != y)
                {
                    b[l]= a[k];
                    l = l + 1;
                }
            /*    else
                {
                    u++;
                }*/
            }
            return b;
        }
        static int[] Order(int[] a,int y)
        {
            int[] b = new int[a.Length];
            for (int i = 0; i < a.Length; i++)
            {
                int j=1;
                int f=0;
                int x=0;
                while (j < a.Length)
                {
                    if (a[f] > a[j])
                    {
                        x = a[j];
                        f = j;
                        j = f + 1;
                    }
                    else
                    {
                        x = a[f];
                        j++;
                    }
                }
                b[i] = x;
                if (x == a[f])
                {
                    a[f] = y;
 
                }
                if (x == a[j-1])
                {
                    a[j - 1] = y;
 
                }
 
            }
            return b;
        }

        static void Main(string[] args)
        {
            int d = Convert.ToInt32(args[0]);
            int e = Convert.ToInt32(args[1]);
            int[] a = GetRandomNO(d,e);
            int[] x = Clear(a,e);
            int[] y = Order(x,e);
            int k = 0;
            for (int c = 0;c< y.Length; c++)
            {
                if (y[c] != 0 && y[c] != e)
                {
                    Console.Write("a[{0}]={1}", c, y[c]);
                    Console.Write("\n");
                }
                else
                {
                    k++;
                }

            }
       /*     int b=0,i=0;
            int j=1;
            while(j<y.Length)
            {
             if(a[i]<a[j])
             {
                if(a[i]!=1000
                 b=a[j];
                 i=j;
                 j=i+1; 
             }
             else
             {
                 b=a[i];
                 j++;
             }
            }
        * */
            Console.Write("the max number is {0}",y[d-1]);
            Console.Write("the total random number is{0}",d- k);
        }
    }
}

回复列表 (共1个回复)

沙发

没人?晕....我顶一下...这个程序不能确定返回随机数的个数..要确定返回一定数量的不重复随机数应该怎么做?

我来回复

您尚未登录,请登录后再回复。点此登录或注册