假设1-100个数字,随机选择20个,要求前面的随机数多,后面的少比如 1-50 随机选择了16个,51-100随机选择4个类似于逐步递减的方式来选择随机数,应该怎么做最好给出代码,谢谢

解决方案 »

  1.   


        int[] numbers = new int[20];
        Random random = new Random();    for (int i = 0; i < 16; i++) numbers[i] = random.Next(1, 51);
        for (int i = 16; i < 20; i++) numbers[i] = random.Next(51, 101);
      

  2.   

    其实就像一楼这样,你把i设大一点,就可以满足你的要求了,不知道LZ是不是这样想的。
      

  3.   

    随即数组,定义数组长度,for循环长度数量,随即产生数组长度个数。
      

  4.   

    6楼gogogo 说的对,最好有一定的曲线,现在不知道用什么计算公式最好,大家能不能给出个代码,谢谢
      

  5.   

            public void GetRandomArray(int index)//index 是你需要的数据的长度.也就是你这里的5.
            {
                int index;
                int[] arr = new int[index] { };
                Random random = new Random();
                for (int i = 1; i <= index; i++)
                {
                    for (int j = 0; j < i; j++)
                    {
                        if (random.Next(index).CompareTo(arr[j]) == 0)
                            continue;
                        else
                            arr[i] = random.Next(index);
                    }
                }
            }
      

  6.   

    向gogogo 学习,能不能提供一段代码供大家参考呢。谢谢
      

  7.   

    中学学的公式曲线是凹陷的很多,我随便来个,只适合这个题目,我用的x平方,保证总数100个数字,其他的自己弄
        int[] num = new int[20];
        int[] numbers = new int[100];
        int nIndex;
        Random random = new Random();//初始化numbers的100个数据
        for (int i = 0; i < 20; i++)
        {
           nIndex = random.Next(1, 100);
           nIndex = nIndex * nIndex / 100; //如果用x的3次方就是nIndex=nIndex*nIndex*nIndex/10000,数字超范围自己研究下,这里不管了
           num[i] = numbers[nIndex -1];
        }这个不能保证取到的数字不重复,如果要求不重复,可以把这段代码只作为取随机数的部分,不重复代码部分可以研究其他人的相关例子。
      

  8.   

          nIndex = random.Next(0, 100); 
          double d = nIndex * 1.0 * nIndex / 100; //如果用x的3次方就是nIndex=nIndex*nIndex*nIndex/10000,数字超范围自己研究下,这里不管了 
          nIndex = (int)d;
         nIndex = (nIndex == 100) ? 99 : nIndex; //极限情况考虑进去
          num[i] = numbers[nIndex];