永发信息网

求一随机算法(牛人进)

答案:1  悬赏:0  手机版
解决时间 2021-04-26 05:09
1、给定一个数字,得到一个随机数组(数组长度可以规定死)

2、数组里面的数字和等于给定的数字数字。

3、 数组里面的数字要随机数,随机数范围,>0 && < 5000 

如: int sz = 3230

  int[] szs = new int[3];

 要求 :szs[0] + szs[1] +szs[2] = sz;  

  1040 + 1235 + 955 = 3230  




 



我有1函数,不怎么好限定范围,各位大侠看看

  public int[] GetNumbersWithTotal(int total, int count)
  {
  List<int> positions = null ; 
  Random random = new Random();
  positions = new List<int>();
  for (int i = 0; i < count - 1; i++) positions.Add(random.Next(total));
  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();
  }

哪位大侠能写成 int[] 函数(最小值,最大值,数组长度,数组和),就非常完美了。
最佳答案


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ConsoleApplication1
{
    class RandomClass
    {
    private readonly int arraylength = 0;   //只能在构造函数中赋值
    private int[] array = null;


    public RandomClass(int length)
    {
    arraylength = length;
    array = new int[arraylength];   //动态改变长度
    }


    public int[] CalAndOutput(int total, out int max, out int min)
    {
    Random r = new Random(DateTime.Now.Millisecond);
    int sum = 0;    //求前几项之和
    int rnum = 0;   //随机数
    int mx = int.MinValue; //最大值
    int mn = int.MaxValue; //最小值


    for (int i = 0; i < array.Length - 1; i++)
    {
    //产生随机数,不能够超过累积和
    do
    {
    rnum = r.Next(1, 4999);
    } while (sum + rnum > total);


    array[i] = rnum;
    sum += rnum;


    if (mx < array[i])
    {
    mx = array[i];
    }
    else if (mn > array[i])
    {
    mn = array[i];
    }
    }
    array[array.Length - 1] = total - sum;
    if (mx < array[array.Length - 1])
    {
    mx = array[array.Length - 1];
    }
    else if (mn > array[array.Length - 1])
    {
    mn = array[array.Length - 1];
    }
    max = mx;
    min = mn;
    return array;
    }
    }


    class Program
    {
    static void Main(string[] args)
    {
    int len = 0;
    int total = 0;
    int max, min;
    Console.WriteLine("请输入数组长度:");
    len = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("请输入总的和:");
    total = Convert.ToInt32(Console.ReadLine());


    RandomClass rc = new RandomClass(len);


    Console.WriteLine("随机加法结果:");
    foreach (var item in rc.CalAndOutput(total, out max, out min))
    {
    Console.Write(item + "    ");
    }
    Console.WriteLine("最大值:" + max);
    Console.WriteLine("最小值:" + min);
    }
    }
}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
把密码改成 “你是白痴”了 安全么?
爱上一个人怎么那么难?
遇见婚礼会馆地址在什么地方,想过去办事
京东跨店满减是什么意思满199减100,商家该怎
衣服上出现一点点黑色的斑点怎么洗掉?
(家庭电脑)怎么做游戏菜单
西安那里可以买到船长香烟?
高三励志小短文
怎样下载84劲舞团?
爱车一族!!
欧日拉地址在什么地方,想过去办事
属羊的叫张浩铭的名字怎样?
步步高有K308型号的手机吗
李连杰的黄飞鸿系列会不会再出续集?
我刚生了个女儿.她姓胡.请大家帮我想一个好听
推荐资讯
我是19920410出去的 想占补我的学业和爱情
怎么加了黑名单的人又跑来评价你啊
《我的心里只有你没有他》这首歌春春一共唱了
我的手机QQ空间里有抢车位,为什么没有农场呢
上火会想吐嘛
范晓萱<我要我们在一起>QQ空间链接
爱情、友谊。你会选择哪一项?
剑网3点中庭后学额外门派招式是不是所有招式
KIRARA我想知道这个在什么地方
江湖风云录-剑侠红颜
和女生怎麽样才算玩滴好阿
谁有Endless Tears…的链接?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?