1、给定一个数字,得到一个随机数组(数组长度可以规定死)2、数组里面的数字和等于给定的数字数字。
如: int sz = 3230 int[] szs = new int[3]; 要求 :szs[0] + szs[1] +szs[2] = sz; 1040 + 1235 + 955 = 3230
数组里面的数字要随机数。。
如: int sz = 3230 int[] szs = new int[3]; 要求 :szs[0] + szs[1] +szs[2] = sz; 1040 + 1235 + 955 = 3230
数组里面的数字要随机数。。
int one = szs[dom.Next(szs.Count)];
第一次,范围为0--size num1
第二次,范围为0--size-num1第三个数 当然就是 size-num1
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;
}
第一次,0--sz,得到一个num1
第二次,0--(sz-num1),得到一个num2
第三次不用随机,num3应该等于sz-num1-num2
|--------|--|------|----------------|
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();
}
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);
}
}
{
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
/// 随机数算法
/// </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;
}
{
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();
}同意说法