大概意思是这样的 有个1-100的数组 然后让他随机不重复插入另一个数组  且不能出现前面或后面连续的  例如  23 24  这样不能出现的  随机不重复我到时会不连续的有点 小麻烦面试

解决方案 »

  1.   

    题目出的不严谨吧 一个数组A 有1-100个数
    然后将其随机插入另一个数组B 是这样吗 要求是 数组B中的数前后不能相临
    是不是只要从第一个数组中任意取数不相邻就行 还是数组A中的1-100个数都必须出现呢?
      

  2.   

    int[] numArray = new int[100];
            ArrayList list = new ArrayList();
            Random ran=new Random();
            int num;
            int prev=0;
            while (list.Count < 100) 
            {
                num = ran.Next(1, 101);
                if (!list.Contains(num)) 
                {
                    if (prev == 0)//考虑到首数字可能是1
                    {
                        list.Add(num);
                    }
                    else 
                    {
                        if (Math.Abs(prev - num) != 1)
                        {
                            list.Add(num);
                            prev = num;
                        }
                    }
                }
            }        list.CopyTo(numArray);        foreach (int i in numArray) 
            {
                Response.Write(i + ",");
            }
      

  3.   


    int[] arrs = Enumerable.Range(1, 100).Select(s => s).ToArray();
                int[] arrs2 = new int[10];//假定另一数组长度为10
                Random rd = new Random();
                int index=0;
                while (index < 10)
                {
                    int num = arrs[rd.Next(0, 100)];
                    if (!arrs2.Contains(num))
                    {
                        if (index == 0)
                        {
                            arrs2[0] = num;
                        }
                        else
                        {
                            if (Math.Abs(num - arrs2[index - 1]) == 1)
                            {
                                index--;
                            }
                            else
                            {
                                arrs2[index] = num;
                            }
                        }
                        index++;
                    }
                }
      

  4.   

    你看下这个,我一直认为是随机数量越大性能越高的List<int> list = new List<int>();
            for (int i = 1; i <= 100; i++)
            {
                list.Add(i);
            }//取到1~100个数字
            Random rand = new Random();
            int[] num = new int[100];//存放随机数容器
            for (int i = 0; i < num.Length; )
            {
                int index = rand.Next(0, list.Count);//每次只取集合剩下的随机下标
                if (i != 0)
                {
                    if (num[i - 1] - list[index] <= 1 || list[index] - num[i - 1] <= 1)//判断是否是相邻的数字
                    {
                        continue;//是的话继续循环
                    }
                    else
                    {
                        num[i] = list[index];//不是相邻的就开始赋值
                        list.RemoveAt(index);//删除已经赋值给数组的数字,集合的大小在改变,方便下次取随机数
                        i++;//数组下标++
                    }
                }
            }