日期:2014-05-18  浏览次数:21293 次

随机生存30W组数!
随机生存30W组数 ,范围1-100. 每组长40个,并保证每组数最少有3个不同

如:

A: 1,2,3,....40
B: 4,5,6.... 43 


有效率高方法吗?





------解决方案--------------------
// 随机生成3个元素的数组集合arraylist
//随机生成长度37位的数组 
//每生成一个判断:
取一个arraylist中的数组 遍历三个元素 是否包含在这个37位数组里
不包含则37+3=40;
直到30W组生成完毕

------解决方案--------------------
random一条一条往数组里插吧 有没有高效的不清楚
------解决方案--------------------
C# code

            ArrayList arraylisttemp1 = new ArrayList();
            ArrayList arraylisttemp2 = new ArrayList();
            Random random = new Random();
            int[] nums3 = new int[3];
            int[] nums2 = new int[37];
            int[] nums1 = new int[3];
            int[] nums4 = new int[40];
            for (int i = 1; i <= 100; i++)
                {
                for (int j = 1; j <= 100; j++)
                    {
                    if (i != j)
                        {
                        for (int k = 1; k <= 100; k++)
                            {
                            if (i != k && j != k)
                                {
                                nums1[0] = i;
                                nums1[1] = j;
                                nums1[2] = k;

                                arraylisttemp1.Add(nums1);
                                }
                            }
                        }
                    }
                }

            for (int j = 0; j < 300000; j++)//需要300000组数组
                {

                for (int i = 0; i < 37; i++)//随机生成37个元素的数组
                    {
                    int a = random.Next(1, 101);
                    nums2[i] = a;
                    }
                arraylisttemp2.AddRange(nums2);

                for (int h = 0; h < arraylisttemp1.Count; h++)//在所有三个数不同的(arraylisttemp1)里面取一个随机数组
                    {
                    int b = random.Next(1, arraylisttemp1.Count);
                    //if (!arraylisttemp1.Contains(arraylisttemp1[b]))
                    //    {
                    ArrayList temp = new ArrayList(arraylisttemp1.Count - 1);//存储中间量

                    for (int i = 0; i < arraylisttemp1.Count-1; i++)//在arraylisttemp1中删除已经取出的 那个三元素数组
                        {
                        if (i < b)
                            {
                            temp.Add(arraylisttemp1[i]);
                            }
                        else if (i >= b)
                            {
                            nums3 = ((int[])arraylisttemp1[b]);
                            temp.Add(arraylisttemp1[i + 1]);
                            arraylisttemp1 = temp;

                            }
                        }


                    //}
                    }
                arraylisttemp2.AddRange(nums3);
                nums4 =(int []) arraylisttemp2 .ToArray (typeof(int));
                arraylisttemp2.Clear();
                foreach (int a in nums4)
                    {
                    Console.Write(a+",");
                    }
            
                Console.WriteLine();
                Console.WriteLine();
                }

------解决方案--------------------
探讨
C# code

ArrayList arraylisttemp1 = new ArrayList();
ArrayList arraylisttemp2 = new ArrayList();
Random random = new Random();
int[] nums3 = new in……

------解决方案--------------------
C# code
List<Int32[]> array = new List<int[]>(300000);
            var temp=Enumerable.Range(1, 100);
            for (int i = 0; i < 300000; i++)
            {
                array.Add(temp.OrderBy(item=>Guid.N