首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

随机生存30W组数!该怎么解决

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

随机生存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.NewGuid()).Skip(60).ToArray());            } 


[解决办法]
arraylist不好吧,用泛型高效些吧
[解决办法]

C# code
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            Console.WriteLine("top 10 of the 300k:");            foreach (var item in foo().Take(10))            {                 Console.WriteLine(string.Join(", ", item));            }        }        static IEnumerable<int[]> foo()        {            return Enumerable.Range(0, 300000).Select((x) =>            {                IEnumerable<int> s = new int[] { };                var rnd = new Random(Guid.NewGuid().GetHashCode());                while (s.GroupBy(y => y).Count() < 3)                {                    s = Enumerable.Range(0, 40).Select(z => rnd.Next(1, 101));                }                return s.ToArray();            });        }    }}
[解决办法]
在Intel Pentium Dual Core E2200上运行,30万全部产生,时间小于10秒。
[解决办法]
不能重复那就更简单了。。。你自己改改不行吗?思路都给你了。

热点排行