Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从给定的和生成30个随机数_C#_.net_Random - Fatal编程技术网

C# 从给定的和生成30个随机数

C# 从给定的和生成30个随机数,c#,.net,random,C#,.net,Random,我正在用C#编写一份报告,报告中给了我一个部门印刷的印刷品总数,我必须按照3月1日10份文件印刷的月份日期分发,依此类推到3月31日 我有一张表格,上面记录了打印件的总数。 我有一个月的假期 从月份开始,我得到总天数,即生成的总天数,例如:30天、31天或28天 情景: 在2000年3月打印出 月份总数:2000 拟产生的数字:31 这是我的密码 int sum = 2345; int nums = 23; Random rand = new Ra

我正在用C#编写一份报告,报告中给了我一个部门印刷的印刷品总数,我必须按照3月1日10份文件印刷的月份日期分发,依此类推到3月31日

我有一张表格,上面记录了打印件的总数。 我有一个月的假期

从月份开始,我得到总天数,即生成的总天数,例如:30天、31天或28天

情景:

在2000年3月打印出 月份总数:2000 拟产生的数字:31

这是我的密码

        int sum = 2345;
        int nums = 23;
        Random rand = new Random();
        int newNum = 0;
        int[] ar = new int[23];
        for (int i = 0; i < nums; i++)
        {
            newNum = rand.Next(0, sum);
            ar[i] = newNum;
            sum = sum - newNum;
        }
        for (int i = 0; i < 23 ; i++)
        {
            Console.WriteLine(ar[i]);

        }
        Console.ReadLine();
int-sum=2345;
int nums=23;
Random rand=新的Random();
int newNum=0;
int[]ar=新的int[23];
对于(int i=0;i
最后的数字变成了零。我想要正态分布,比如在一个索引上,它首先存储最大值,最后它会减小

我们安装了第三方理光打印/复印机,第三方向我们收取一定金额的账单,他们计算我们部门已打印了3000份打印件,因此我们必须在几天内随机分发,打印报告,并从我们部门负责人处获得付款发票

部门人员正在excel上执行此操作,我向他们提供了解决方案。Windows窗体应用程序是构建的,我只需要把这个逻辑放在这里。。
感谢您的反馈

如果您想要23个随机数的总和为2345,您可以使用以下代码:

        int sum = 2345;
        int nums = 23;
        int max = sum / nums;
        Random rand = new Random();
        int newNum = 0;
        int[] ar = new int[23];
        for (int i = 0; i < nums-1; i++) {
            newNum = rand.Next(max);
            ar[i] = newNum;
            sum-= newNum;
            max = sum / (nums-i-1);
        }
        ar[nums - 1] = sum;
int-sum=2345;
int nums=23;
int max=总和/nums;
Random rand=新的Random();
int newNum=0;
int[]ar=新的int[23];
对于(int i=0;i
它将为您提供:


如果您想要23个随机数的总和为2345,可以使用以下代码:

        int sum = 2345;
        int nums = 23;
        int max = sum / nums;
        Random rand = new Random();
        int newNum = 0;
        int[] ar = new int[23];
        for (int i = 0; i < nums-1; i++) {
            newNum = rand.Next(max);
            ar[i] = newNum;
            sum-= newNum;
            max = sum / (nums-i-1);
        }
        ar[nums - 1] = sum;
int-sum=2345;
int nums=23;
int max=总和/nums;
Random rand=新的Random();
int newNum=0;
int[]ar=新的int[23];
对于(int i=0;i
它将为您提供:


您可以通过分区轻松完成这一任务。对于产生10件事情的4天月:生成3个介于0和10(含)之间的随机数。对它们进行排序,并在数字列表中添加10。因此,我们可能:

3 6 6 10
将我们的打印进行分区:

p p p | p p p | | p p p p

使用分区可以很容易地做到这一点。对于产生10件事情的4天月:生成3个介于0和10(含)之间的随机数。对它们进行排序,并在数字列表中添加10。因此,我们可能:

3 6 6 10
将我们的打印进行分区:

p p p | p p p | | p p p p

以下是我生成30个具有特定总和的随机数的想法:

int sum = 3000;
int size = 30; // assumes that (sum % size == 0)
int[] result = new int[size];
Random rand = new Random();
int x = sum / size;

for (int i = 0; i < size; i++)
{
    result[i] = x;
}

for (int i = 0; i < x; i++)
{
    var a = rand.Next(size - 1); // not sure if parameter is inclusive?
    var b = rand.Next(size - 1); // should return number between 0 and size-1 inclusively

    result[a]++;
    result[b]--;
}

int testSum = result.Sum(); // will equal "sum" (3000)
int和=3000;
int size=30;//假设(总和%size==0)
int[]结果=新的int[大小];
Random rand=新的Random();
int x=总和/大小;
对于(int i=0;i

不过,李·丹尼尔·克罗克(Lee Daniel Crocker)认为这是一个更好的解决方案。非常简洁直观。

我的想法是生成30个具有特定总和的随机数:

int sum = 3000;
int size = 30; // assumes that (sum % size == 0)
int[] result = new int[size];
Random rand = new Random();
int x = sum / size;

for (int i = 0; i < size; i++)
{
    result[i] = x;
}

for (int i = 0; i < x; i++)
{
    var a = rand.Next(size - 1); // not sure if parameter is inclusive?
    var b = rand.Next(size - 1); // should return number between 0 and size-1 inclusively

    result[a]++;
    result[b]--;
}

int testSum = result.Sum(); // will equal "sum" (3000)
int和=3000;
int size=30;//假设(总和%size==0)
int[]结果=新的int[大小];
Random rand=新的Random();
int x=总和/大小;
对于(int i=0;i

不过,李·丹尼尔·克罗克(Lee Daniel Crocker)认为这是一个更好的解决方案。非常简洁直观。

开始编写代码,遇到困难时寻求具体帮助。你会如何在纸上完成?对于统一分发,请使用:开始编写代码,遇到困难时寻求具体帮助。在纸上如何完成?对于统一分发,请使用:数学,这不是均匀分布的。你没有真正改变它的作用。算法本身是有缺陷的。或者可能是规格太高了。我不确定。你要么得到许多零,要么得到少于30的结果。根据OP.int sum=2345,不确定是否有效;int nums=23;Random rand=新的Random();int newNum=0;int[]ar=新的int[23];for(inti=0;i