1、给定一个数字,得到一个随机数组(数组长度可以规定死)2、数组里面的数字和等于给定的数字数字。
如: int sz = 3230     int[] szs = new int[3]; 要求 :szs[0] + szs[1] +szs[2] = sz;     1040   + 1235 + 955 = 3230 
   数组里面的数字要随机数。。

解决方案 »

  1.   

     Random dom = new Random(unchecked((int)(DateTime.Now.Ticks >> i)));
     int one = szs[dom.Next(szs.Count)];
      

  2.   

    严重鄙视,i是什么?szs是什么?
      

  3.   

    我的思路是: 三次随机取数。 实际为2次。
    第一次,范围为0--size  num1
    第二次,范围为0--size-num1第三个数 当然就是 size-num1 
      

  4.   


    public string[] Ran()
            {
                int sum = Convert.ToInt32(textBox1.Text);//textBox为给定的数字 
                string[] strs = new string[3];
                int sum2=0;
                Random ran=new Random();
                for (int i = 0; i < strs.Length-1;)
                {
                    int rom = ran.Next();//取随机数字 ,如果小于给定数字就赋给数组
                    if (rom < sum)
                    {
                        strs[i] = rom.ToString();
                        sum2+=rom;
                        i++;
                    }
                }
                strs[strs.Length-1] = Convert.ToString(sum-sum2);
                return strs;
            }
      

  5.   

    这样的思想可以达到想要的效果,好像要加一个floor()函数吧
      

  6.   

    5楼的思路有一点问题,应该这样:
    第一次,0--sz,得到一个num1
    第二次,0--(sz-num1),得到一个num2
    第三次不用随机,num3应该等于sz-num1-num2
      

  7.   

    从另一个方向看,问题转换为,一个固定的线段,被随机切成n块,求每快的长度(记住他们加起来正好为总长):给定一个数字32,得到一个长度为4的随机数组,可以在线长切3刀(自由度为3),各段的长度即答案。
    |--------|--|------|----------------|
    32 = 8+2+6+16static double[] GetNumbersWithTotal(double total, int count)
    {
        Random random = new Random();
        List<double> positions = new List<double>();
        for (int i = 0; i < count - 1; i++) positions.Add(random.NextDouble() * total);
        positions.Sort();
        positions.Add(total);    double lastValue = 0;
        for (int i = 0; i < positions.Count; i++)
        {
            double diff = positions[i] - lastValue;
            lastValue = positions[i];
            positions[i] = diff;
        }    return positions.ToArray();
    }
      

  8.   

    下面是根据5楼和我的思路的代码:using System;
    using System.Collections.Generic;
    using System.Text;class myclass
    {
      public static void Main(string[] args)
     {
        int[] szs=new int[3];
        Console.Write("请输入:");
        int y=Convert.ToInt32(Console.ReadLine());
        Random rand=new Random();
        for(int i=0;i<=szs.Length-2;i++)
        {
             szs[i]=rand.Next(y);
             y=y-szs[i];
        }
        szs[szs.Length-1]=y;
        int sum=0;
        for(int j=0;j<szs.Length;j++)
       {
             sum=sum+szs[j];
             Console.WriteLine("{0}",szs[j]);
       }
       Console.WriteLine("sum={0}",sum);
     }
    }
      

  9.   

    int[] ss = GetNumbersWithTotal(320000, 300);      public  int[] GetNumbersWithTotal(int total, int count)
            {
                Random random = new Random();
                List<int> positions = new List<int>();
                for (int i = 0; i < count - 1; i++) positions.Add(random.Next(320000));
                positions.Sort();
                positions.Add(total);            int lastValue = 0;
                for (int i = 0; i < positions.Count; i++)
                {
                    int diff = positions[i] - lastValue;
                    lastValue = positions[i];
                    positions[i] = diff;
                }            return positions.ToArray();
            }
    能限定positions[i]范围区间吗?  如最小58,最大 3999   
      

  10.   

    用Random还有能做不到的事????
      

  11.   

    1、给定一个数字,得到一个随机数组(数组长度可以规定死)2、数组里面的数字和等于给定的数字。3、数组里随机数最大值< 10000,最小值 >0
      

  12.   

    不知道你注册了几个号 来问这个问题        /// <summary>
            /// 随机数算法
            /// </summary>
            /// <param name="sum">给定的作为和的数字</param>
            /// <param name="max">数组中数字允许的最大值</param>
            /// <param name="min">数组中数字允许的最小值</param>
            /// <param name="lenght">数组长度</param>
            /// <returns>int数组</returns>
            public int[] Ran(int sum,int max,int min,int lenght)
            {
                int[] nums = new int[lenght];
                int sum2=0;
                Random ran=new Random();
                for (int i = 0; i < nums.Length-1;)
                {
                    int rom = ran.Next();//取随机数字 ,如果小于给定数字就赋给数组
                    if (rom>min && rom<max && sum2+rom<sum)
                    {
                        nums[i] = rom;
                        sum2+=rom;
                        i++;
                    }
                }
                nums[nums.Length-1] = Convert.ToString(sum-sum2);
                return nums;
            }
      

  13.   

    int[] ss = GetNumbersWithTotal(320000, 300);  public int[] GetNumbersWithTotal(int total, int count)
      {
      Random random = new Random();
      List<int> positions = new List<int>();
      for (int i = 0; i < count - 1; i++) positions.Add(random.Next(320000));
      positions.Sort();
      positions.Add(total);  int lastValue = 0;
      for (int i = 0; i < positions.Count; i++)
      {
      int diff = positions[i] - lastValue;
      lastValue = positions[i];
      positions[i] = diff;
      }  return positions.ToArray();
      }同意说法